[英]How to address a dictionary in a list of ordered dicts by unique key value?
(使用Python 2.7)列表,例如:
L = [
{'ID': 1, 'val': ['eggs']},
{'ID': 2, 'val': ['bacon']},
{'ID': 6, 'val': ['sausage']},
{'ID': 9, 'val': ['spam']}
]
這就是我想要的:
def getdict(list, dict_ID):
for rec in list
if rec['ID'] == dict_ID:
return rec
print getdict(L, 6)
但有沒有辦法直接解決該詞典,而不會迭代列表直到找到它?
用例:讀取記錄文件(有序的dicts)。 來自具有重新出現ID的記錄的不同鍵值必須與具有該ID的第一次出現的記錄合並。
ID號可能出現在其他鍵值中,因此if rec['ID'] in list
會產生誤報。
在讀取記錄(並將它們添加到有序dicts列表中)時,我保留了一組唯一ID,並且只有在新讀取的ID已經存在時才調用getdict
。 但是,它仍然是很多迭代,我想知道是否有更好的方法。
用例:讀取記錄文件(有序的dicts)。 來自具有重新出現ID的記錄的不同鍵值必須與具有該ID的第一次出現的記錄合並。
你需要使用defaultdict
:
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d['a'].append(1)
>>> d['a'].append(2)
>>> d['b'].append(3)
>>> d['c'].append(4)
>>> d['b'].append(5)
>>> print(d['a'])
[1, 2]
>>> print(d)
defaultdict(<type 'list'>, {'a': [1, 2], 'c': [4], 'b': [3, 5]})
如果要存儲其他對象(例如字典),只需將其作為可調用對象傳遞:
>>> d = defaultdict(dict)
>>> d['a']['values'] = []
>>> d['b']['values'] = []
>>> d['a']['values'].append('a')
>>> d['a']['values'].append('b')
>>> print(d)
defaultdict(<type 'dict'>, {'a': {'values': ['a', 'b']}, 'b': {'values': []}})
也許我錯過了什么,但你不能使用一本字典嗎?
L = {
1 : 'eggs',
2 : 'bacon',
6 : 'sausage',
9 : 'spam'
}
然后你可以做L.get(ID)
。 如果ID不在dict中,這將返回值(eggs等)或None
。
您似乎正在執行逆字典查找,即按值而不是鍵查找。 反向字典查找 - Python有一些關於如何有效地執行此操作的指示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.