我有一个不一定具有相同键的字典列表。我正在尝试创建每个包含特定键的字典中包含的值的新列表。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] –