別の形式にリストのリストを変換しますしようとしてきまし:は、私はこのようになりますリストのリストを持っている
def convert(list):
for i in list:
return reduce(lambda x,y: objects.filter + '(' + x + ', ' + y + ')' , i)
map(lambda i: convert(i), names_list))
別の形式にリストのリストを変換しますしようとしてきまし:は、私はこのようになりますリストのリストを持っている
def convert(list):
for i in list:
return reduce(lambda x,y: objects.filter + '(' + x + ', ' + y + ')' , i)
map(lambda i: convert(i), names_list))
わずかunderstandinなしaphazardly何かをしようと、「プログラミング偶然」アプローチ(すなわちそしてそれが魔法のように "仕事の種類"であることを望むなら)あなたを遠くに連れて行くことはありません。あなたは何をやっているのか、またその理由を理解するにはが必要です。
最初のポイント:ターゲットはデータではなくPythonの式なので、ソースデータを "別のフォーマットに"変換するのではなく、ソースデータの式を動的に構築(および評価)することです。
2点目:
names_list = [
{"first":'Katie', "last":'Beckett'},
{"first":'David', "last":'Seal'},
{"first":'Eric', "last":'Swartz'}
]
この:あなたのソースデータフォーマットは単純に間違っている、あなたはlitteral「最初= < ...>」ここに文字列が、非常に明らかにdictsすなわちのリストを望んでいませんつまり、あなたが関数呼び出しで開梱辞書を使用することができます:
target = names_list[0]
result = object.filter(**target)
第三のポイント:objects.filter + '(' + x + ', ' + y + ')'
は何も意味しない - 機能とうまく動作しません文字列を追加しようとしています。とにかく文字列としてPythonの式を構築しようとしないでください。Pythonは、そのような汚いハックがなければ、問題の種類を解決できるほど表現力豊かでダイナミックです。
あなたがここで望むものは、object.filter()
への呼出しのシーケンス(呼び出しの結果)を構築し、2「または」これらの結果を一緒にすることです。
最初のステップは非常に簡単である:
items = [object.filter(**target) for target in names_list]
第2のステップは、「biwiseまたは」オペレータ(|
)を使用して、この配列を「削減」することです。 reduce()
は本当にこれにふさわしい機能です。あなたはあなたのアイテムのうちの2つを取り出し、それらを「or'ing」する機能が必要です。単純なアプローチは、ラムダを使用することである。
result = reduce(lambda y, x: x | y, items)
をこれはPythonのオペレータため車輪の再発明の場合である(良く、それらのほとんど)operator
モジュールに機能バージョンに存在する:
import operator
result = reduce(operator.or_, items)
'object.filter'とは何ですか?そしてそれは何を返すのですか? –
@MuhammadTahirはdjangoのorm 'Q'オブジェクトのようですhttps://docs.djangoproject.com/ja/1.9/topics/db/queries/#complex-lookups-with-q-objects –