使用a = copyf(dictlist, key, valuelist)
。
>>> dictlist = [{'first': 'James',
'last': 'Joule'},
{'first': 'James',
'last': 'Watt'},
{'first': 'Christian',
'last': 'Doppler'}]
>>> valuelist = ['James', 'John']
>>> x = copyf(dictlist, 'first', valuelist)
>>> print(x)
[{'first': 'James',
'last': 'Joule'},
{'first': 'James',
'last': 'Watt'}]
dictlist
实际上是csv.DictReader
个实例。
答案 0 :(得分:12)
更新:考虑到OP的重新编辑问题:
def copyf(dictlist, key, valuelist):
return [dictio for dictio in dictlist if dictio[key] in valuelist]
答案 1 :(得分:6)
可能不是最好的解决方案,但我们走了:
>>> def copyf(data, key, allowed):
... return filter(lambda x: key in x and x[key] in allowed, data)
...
>>> dictlist = [{'first': 'James', 'last': 'Joule'}, {'first': 'James','last': 'Watt'},{'first': 'Christian','last': 'Doppler'}]
>>> copyf(dictlist, 'first', ('Christian',))
[{'last': 'Doppler', 'first': 'Christian'}]
>>> copyf(dictlist, 'last', ('Christian',))
[]
>>> copyf(dictlist, 'first', ('James',))
[{'last': 'Joule', 'first': 'James'}, {'last': 'Watt', 'first': 'James'}]
>>>
答案 2 :(得分:2)
像
这样的东西new_dict = dict((k, v) for k,v in old_dict.items() if v in allowed_values)
答案 3 :(得分:1)
干净整洁,使用过滤器和 lambda
>>> def copyf(dictlist, key, valuelist):
... filter(lambda d: d[key] in valuelist, dictlist)
答案 4 :(得分:0)
我更喜欢
过滤器(lambda d:d [key]中的值,dictlist)