根据以键为过滤器的字典列表创建字典列表

时间:2021-06-10 11:32:56

标签: python dictionary

我只发现人们想根据某些键将字典复制到另一个字典而不是字典列表的问题。

假设我有一个包含字典的列表

myList = [
  {'version': 'v1', 'updated': '2020-06-17 22:15:00+00:00', 'name': 'alpha'},
  {'version': 'v5', 'updated': '2019-08-30 11:42:00+00:00', 'title': 'gamma'},
  {'version': 'v7', 'updated': '2020-06-17 22:15:00+00:00', 'name': 'eta'}
]

现在我想创建一个新的字典列表,只保留键 versionupdated。很可能字典也有一些彼此不同的键,如 myList 中显示的 nametitle。但这不应该打扰我,因为我知道我要过滤的键在每个字典中都是相同的。所以对我来说使用 versionupdated 而不是像用 nametitle 丢弃所有东西是很重要的。结果应该是一个新的字典列表

myFilteredList= [
  {'version': 'v1', 'updated': '2020-08-24 17:37:00+00:00'},
  {'version': 'v5', 'updated': '2019-08-30 11:42:00+00:00'},
  {'version': 'v7', 'updated': '2020-06-17 22:15:00+00:00'}
]

2 个答案:

答案 0 :(得分:1)

您可以使用字典推导在每个字典的列表推导中进行过滤。基本上检查密钥是否在您想要的集合中,如果是,则将该对保存在您新生成的字典中。

>>> [{k:v for k,v in d.items() if k in {'version', 'updated'}} for d in myList]
[{'version': 'v1', 'updated': '2020-06-17 22:15:00+00:00'},
 {'version': 'v5', 'updated': '2019-08-30 11:42:00+00:00'},
 {'version': 'v7', 'updated': '2020-06-17 22:15:00+00:00'}]

答案 1 :(得分:0)

您可以使用这些键创建新的字典列表

myFilteredList = [{'version': d.get('version'), 'updated': d.get('updated')} for d in myList]

# [{'version': 'v1', 'updated': '2020-06-17 22:15:00+00:00'},
#  {'version': 'v5', 'updated': '2019-08-30 11:42:00+00:00'},
#  {'version': 'v7', 'updated': '2020-06-17 22:15:00+00:00'}]