1

私がこれを持っているとしましょう:

list = [ { 'p1':'v1' } ,{ 'p2':'v2' } ,{ 'p3':'v3' } ]

p2 を見つけて、その値を取得する必要があります。

4

7 に答える 7

2

次のことを試すことができます...これにより、すべての辞書で givenKey と同等のすべての値が返されます。

ans = [d[key] for d in list if d.has_key(key)]
于 2012-09-20T22:22:25.043 に答える
1

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'
于 2012-09-20T22:46:05.937 に答える
1

このワンライナーを使用することもできます:

filter(lambda x: 'p2' in x, list)[0]['p2']

'p2'が複数ある場合は、最初のものが選択されます。ない場合は、IndexErrorが発生します。

于 2012-09-20T22:24:27.527 に答える
1
for d in list:
    if d.has_key("p2"):
        return d['p2']
于 2012-09-20T22:18:15.287 に答える
1

これが実際のコードのように見える場合 (各キーは一意)、辞書を 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()関数で問題が発生するからです。

于 2012-09-20T22:18:29.590 に答える
1

これらは最初からリストに保存するのではなく、辞書に保存する必要があります。ただし、それらはリストに保存されているため、そのまま検索することもできます。

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"]
于 2012-09-20T22:20:41.593 に答える
1

辞書のリストを辞書にフラット化することから始めます。次に、キーでインデックスを付けて値を取得できます。

{k:v for x in list for k,v in x.iteritems()}['p2']
于 2012-09-20T23:33:48.960 に答える