python 列表理解:字典列表到具有键交集的列表字典

问题描述 投票:0回答:1

我有一个包含可变数量词典的列表,例如:

var = [ {'a': 1, 'b': 2}, {'b': 20, 'a': 10, 'c': 30}, {'c': 300, 'a': 100} ]

我需要提取所有字典共有的键,创建其关联值的列表,从中创建一个新字典,并将其存储在同一个变量中:

预期结果是:

var = { 'a': [1, 10, 100] }

我可以找到键的交集:

[k for k in var[0] if all(k in d for d in var[1:])]

但是如何完成剩下的转换呢?

python list-comprehension
1个回答
1
投票

一旦你知道了你关心的键,只需迭代并拉动它们即可:

from collections import defaultdict

new_var = defaultdict(list)
for d in var:
    for k in common_keys:
        new_var[k].append(d[k])

new_var = dict(new_var)  # Optionally convert back to plain dict to avoid autovivification

旁注:有一种更简单/更快的方法来计算公共密钥:

common_keys = set(var[0]).intersection(*var[1:])

这会将第一个

dict
的键转换为
set
,然后允许
set
intersection
方法在 C 层的一次调用中生成交集(相对于它的操作方式,它没有显着的不同)到您的代码,但它避免了大量的解释器开销)。

© www.soinside.com 2019 - 2024. All rights reserved.