按Python3中的键列表过滤字典列表

时间:2014-07-15 16:44:18

标签: python list python-3.x dictionary

如何在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'

这是线程安全吗?

2 个答案:

答案 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)