我有一個不一定具有相同鍵的字典列表。我正在嘗試創建每個包含特定鍵的字典中包含的值的新列表。Python從具有特定鍵的每個字典的字典列表創建列表
E.g.
dict1 = {'key1': 1, 'key2': 2, 'key4': 4}
dict2 = {'key2': 2, 'key3': 3}
dict3 = {'key1': 1, 'key2': 2, 'key3': 3}
dict_list = [dict1, dict2, dict3]
現在,我試圖從dict_list創建列表如下:
key2vals = [dict['key2'] for dict in dict_list]
print(key2vals)
[2, 2, 2]
行之有效,因爲「KEY2」被包含在列表中的每個詞典。但是,當我嘗試一個沒有出現在每本字典中的密鑰時,我會遇到一個錯誤。例如。 'key1':
>>> key1vals = [dict['key1'] for dict in dict_list]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <listcomp>
KeyError: 'key1'
有沒有一個簡短而直接的方法,我可以做下面的事情,這是行不通的?
# This does not work
key1vals = [dict['key1'] if 'key1' in dict for dict in dict_list]
什麼是最Python化的方法來實現這一目標?
答: 的並if語句應該已經本末倒置:
key1vals = [dict['key1'] for dict in dict_list if 'key1' in dict ]
而且,與AbrahamB和DJV的建議,我能夠將默認值添加到這些字典沒有搜索關鍵字:
[dict.get('key1', 0) for dict in dict_list]
您可以在原始示例問題中使用a.get('key','defaultValue')格式嗎?我並不完全遵循如何在更大的圖景中使用它。 –
DJV剛剛在另一條評論中提供了答案:[d.get('key1',0)for dict_list] –