说我有字典:
myDict = [{'first': 'James', 'middle': 'Smith', 'last': 'Joule'},
{'first': 'James', 'middle': 'Johnson', 'last': 'Watt'},
{'first': 'Christian', 'middle': 'Edward', 'last': 'Doppler'}
{'first': 'Robert', 'last': 'Antonio'}]
我有一个名为keys的列表:
keys = ["middle", "last"]
我想根据键中的每个值过滤myDict,这会导致
filteredDict = [{'middle': 'Smith', 'last': 'Joule'},
{'middle': 'Johnson', 'last': 'Watt'},
{'middle': 'Edward', 'last': 'Doppler'},
{'last': 'Antonio'}]
如myDict列表中的列表字典中所示,字典DOESNT必须具有两个键才能放入filteredDict。在Python中使用字典理解有一种简单的方法吗?
答案 0 :(得分:8)
使用列表推导:
myDict = [{'first': 'James', 'middle': 'Smith', 'last': 'Joule'},
{'first': 'James', 'middle': 'Johnson', 'last': 'Watt'},
{'first': 'Christian', 'middle': 'Edward', 'last': 'Doppler'},
{'first': 'Robert', 'last': 'Antonio'}]
keys = {"middle", "last"}
l = [{k:v for k, v in i.items() if k in keys} for i in myDict]
但您也可以使用map:
myDict = [{'first': 'James', 'middle': 'Smith', 'last': 'Joule'},
{'first': 'James', 'middle': 'Johnson', 'last': 'Watt'},
{'first': 'Christian', 'middle': 'Edward', 'last': 'Doppler'},
{'first': 'Robert', 'last': 'Antonio'}]
keys = {"middle", "last"}
l = list(map(lambda x: {k:v for k, v in x.items() if k in keys}, myDict))
print(l)
输出:
[{'last': 'Joule', 'middle': 'Smith'}, {'last': 'Watt', 'middle': 'Johnson'}, {'last': 'Doppler', 'middle': 'Edward'}, {'last': 'Antonio'}]
答案 1 :(得分:1)
如果您只是这样做一次,请使用 neverwalkaloner 的答案。但是,如果你发现自己经常操纵字典列表,我写了一个名为PLOD的免费库,它简化了大部分内容。
>>> from PLOD import PLOD
>>> l = PLOD(myDict).dropKey("middle").returnList()
>>> l
[{'last': 'Joule', 'first': 'James'}, {'last': 'Watt', 'first': 'James'}, {'last': 'Doppler', 'first': 'Christian'}, {'last': 'Antonio', 'first': 'Robert'}]
>>> print(PLOD(l).returnString())
[
{first: 'James' , last: 'Joule' },
{first: 'James' , last: 'Watt' },
{first: 'Christian', last: 'Doppler'},
{first: 'Robert' , last: 'Antonio'}
]
>>>
图书馆在PyPi上:https://pypi.python.org/pypi/PLOD
为了更普遍地做你想要的,我需要添加一个新的类方法。也许是.filterKeys
。也许我会在1.8版本中这样做。然后会:
>>> l = PLOD(myDict).filterKeys(['first', 'last']).returnList()
嗯...
BTW,lib现在支持Python 2.7.x.仍在使用3.5.x版本。