我对Python和stackoverflow都非常陌生。感谢您的耐心和帮助。
我想根据一个列表的内容来过滤一个字典,就像这样:
d={'d1':1, 'd2':2, 'd3':3}
f = ['d1', 'd3']
r = {items of d where the key is in f}
这种写法是否可行?如果不是,正确的语法应该是什么?
谢谢您的帮助。
Vincent
我对Python和stackoverflow都非常陌生。感谢您的耐心和帮助。
我想根据一个列表的内容来过滤一个字典,就像这样:
d={'d1':1, 'd2':2, 'd3':3}
f = ['d1', 'd3']
r = {items of d where the key is in f}
这种写法是否可行?如果不是,正确的语法应该是什么?
谢谢您的帮助。
Vincent
假设你想创建一个新的字典(无论出于什么原因):
d = {'d1':1, 'd2':2, 'd3':3}
keys = ['d1', 'd3']
filtered_d = dict((k, d[k]) for k in keys if k in d)
# or: filtered_d = dict((k, d[k]) for k in keys)
# if every key in the list exists in the dictionary
d
,该字典的值是列表,并返回了一个空的字典。请问如何修改这几行代码呢? - FaCoffeefor k in keys: filtered_d[k]=d[k]
? - FaCoffee您可以使用列表推导式遍历列表,并在字典中查找键,例如:
aa = [d[k] for k in f]
>>> d = {'k1': 1, 'k2': 2, 'k3' :3}
>>> f = ['k1', 'k2']
>>> aa = [d[k] for k in f]
>>> aa
[1, 2]
如果您想从结果重建一个字典,可以将键也捕获到元组列表中并转换为字典,例如:
aa = dict ([(k, d[k]) for k in f])
Python的更新版本(特别是2.7、3)具有一种名为字典推导的功能,可以一次性完成所有操作。更深入地讨论可以点击这里。
d.get(key)
绕过这个问题的方法。 - ConcernedOfTunbridgeWells
['d1', 'd3', 'd99']
,那么期望的结果是什么? - PaulMcG