如何在Python3中过滤字典列表?
results = [{'name':'jason','email':'test1@example.com'},
{'name':'mike','email':'test2@example.com'},
{'name':'eric','email':'test3@example.com'}]
allowed_keys = ['name']
我以为我可以做类似的事情:
results2 = dict((k, v) for k,v, in results.items() if k in allowed_keys)
但是我收到了这个错误:
>> AttributeError: 'list' object has no attribute 'items'
这是线程安全吗?
答案 0 :(得分:1)
鉴于你的澄清评论“我想返回一个只包含关键'名字'的词典列表:
>>> [{k: d[k] for k in allowed_keys} for d in results]
[{'name': 'jason'}, {'name': 'mike'}, {'name': 'eric'}]
注意:此解决方案假定allowed_keys
中的所有键都保证在结果中的每个字典中。如果没有,请执行此操作(但请注意,最终可能会出现一些空字典):
[{k: d[k] for k in allowed_keys if k in d} for d in results]
答案 1 :(得分:0)
一个班轮有点乱,但在这里。 简而言之,您忘记添加外部循环来遍历所有词典。
new_results = [dict((k, v) for k, v in d.items() if k in allowed_keys) for d in results]
也许是一个更具可读性的解决方案:
new_results = []
for d in results:
new_d = {}
for k, v in d.items():
if k in allowed_keys:
new_d[k] = v
new_results.append(new_d)