如何将字典中的对提取到新的较小字典中?

Mto*_*heM 3 python dictionary python-3.x

我有一本大字典,但我只需要使用其中的一些数据。如何仅提取我想要的数据对并使用所选数据构建新的数据对?

{'index': 325, 'name': 'Zombie', 'size': 'Medium', 'type': 'undead' ... }
Run Code Online (Sandbox Code Playgroud)

假设我只想从这本字典中获取name和,type如下所示:

{'name': 'Zombie', 'type': 'undead'}
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?我可以删除不需要使用的元素del d[key],但这似乎效率很低,并且如果稍后添加更多数据,则不会可靠。

我想制作一个较小的字典的原因是这样我可以像这样将数据直接加载到我的类中

Entity(**index[enemy_id])
Run Code Online (Sandbox Code Playgroud)

但如果数据量超过了类所能容纳的数量,它就不起作用。

Roa*_*ner 5

不需要迭代整个字典,只需过滤掉你想要的键:

>>> d = {'index': 325, 'name': 'Zombie', 'size': 'Medium', 'type': 'undead'}
>>> keys = ['name', 'type']
>>> {key: d.get(key) for key in keys}
{'name': 'Zombie', 'type': 'undead'}
Run Code Online (Sandbox Code Playgroud)

在这里使用dict.get()还可以防止KeyError在键不存在时引发,而只是返回None

如果你想忽略中不存在的键d,那么你可以这样做:

{key: d[key] for key in keys if key in d}
Run Code Online (Sandbox Code Playgroud)

  • 这可能应该是公认的答案,尽管我不知道这个的速度 (2认同)
  • @MtotheM 更新了答案以包括忽略不存在的键的解决方案 (2认同)
  • 很好的答案,而且也很快。我想知道这是否是因为它正在遍历字典的视图...@RoadRunner `key in d` 是否与键、值或项目匹配? (2认同)