私がこれを持っているとしましょう:
list = [ { 'p1':'v1' } ,{ 'p2':'v2' } ,{ 'p3':'v3' } ]
p2 を見つけて、その値を取得する必要があります。
私がこれを持っているとしましょう:
list = [ { 'p1':'v1' } ,{ 'p2':'v2' } ,{ 'p3':'v3' } ]
p2 を見つけて、その値を取得する必要があります。
次のことを試すことができます...これにより、すべての辞書で givenKey と同等のすべての値が返されます。
ans = [d[key] for d in list if d.has_key(key)]
1回限りのルックアップの場合は、次のようにすることができます
>>> [i['p2'] for i in my_list if 'p2' in i]
['v2']
複数のキーを検索する必要がある場合は、リストを一定時間でキー検索を実行できるもの(dictなど)に変換することを検討する必要があります。
>>> my_list = [ { 'p1':'v1' } ,{ 'p2':'v2' } ,{ 'p3':'v3' } ]
>>> my_dict = dict(i.popitem() for i in my_list)
>>> my_dict['p2']
'v2'
このワンライナーを使用することもできます:
filter(lambda x: 'p2' in x, list)[0]['p2']
'p2'が複数ある場合は、最初のものが選択されます。ない場合は、IndexErrorが発生します。
for d in list:
if d.has_key("p2"):
return d['p2']
これが実際のコードのように見える場合 (各キーは一意)、辞書を 1 つだけ使用する必要があります。
things = { 'p1':'v1', 'p2':'v2', 'p3':'v3' }
do_something(things['p2'])
辞書をマージすることで、辞書のリストを 1 つの辞書に変換できますupdate
(ただし、重複したキーは上書きされます)。
dict = {}
for item in list:
dict.update(item)
do_something(dict['p2'])
それが不可能な場合は、それらをループする必要があります。
for item in list:
if 'p2' in item:
do_something(item['p2'])
複数の結果が予想される場合は、リストを作成することもできます。
p2s = []
for item in list:
if 'p2' in item:
p2s.append(item['p2'])
dict
また、変数や変数に実際に名前を付けることはお勧めしません。list
組み込み関数dict()
やlist()
関数で問題が発生するからです。
これらは最初からリストに保存するのではなく、辞書に保存する必要があります。ただし、それらはリストに保存されているため、そのまま検索することもできます。
lst = [ { 'p1':'v1' } ,{ 'p2':'v2' } ,{ 'p3':'v3' } ]
p2 = next(d["p2"] for d in lst if "p2" in d)
または、それらを辞書に変換します。
dct = {}
any(dct.update(d) for d in lst)
p2 = dct["p2"]
辞書のリストを辞書にフラット化することから始めます。次に、キーでインデックスを付けて値を取得できます。
{k:v for x in list for k,v in x.iteritems()}['p2']