簡體   English   中英

如何在字典數組中找到項目?

[英]How do I find an item in an array of dictionaries?

假設我有這個:

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

我需要找到p2並獲取其值。

您可以嘗試以下操作...這將返回所有字典中與給定鍵等效的所有值。

ans = [d[key] for d in list if d.has_key(key)]
for d in list:
    if d.has_key("p2"):
        return d['p2']

如果這是您的實際代碼(每個鍵都是唯一的),則應該只使用一個字典:

things = { 'p1':'v1', 'p2':'v2', 'p3':'v3' }
do_something(things['p2'])

您可以通過將字典與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'])

另外,我不建議實際命名任何變量dictlist ,因為這將導致內置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"]

您還可以使用此單線:

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

如果您有多個“ p2”,則將選擇第一個; 如果沒有,它將引發IndexError。

如果是一次性查找,則可以執行以下操作

>>> [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'

首先將字典列表平整為詞典,然后可以通過鍵對其進行索引並獲取值:

{k:v for x in list for k,v in x.iteritems()}['p2']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM