[英]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'])
另外,我不建議實際命名任何變量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"]
您還可以使用此單線:
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.