如何基于字典键交集将字典列表转换为列表字典?
问题描述
现有一个包含可变数量字典的列表,示例如下:
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:])]
请问如何完成后续的转换步骤?
解决方法
你可以基于已获取的共有键,用字典推导式直接生成目标字典,完成转换:
方法一:基于你已有的键交集代码
# 先获取共有键 common_keys = [k for k in var[0] if all(k in d for d in var[1:])] # 生成新字典并覆盖原变量 var = {key: [d[key] for d in var] for key in common_keys}
方法二:用集合操作简化键交集获取(可读性更强)
如果想让代码更简洁直观,可借助集合的intersection方法直接计算所有字典键的交集:
# 获取所有字典的共有键 common_keys = set(var[0]).intersection(*var[1:]) # 生成目标字典 var = {key: [d[key] for d in var] for key in common_keys}
合并成一行代码(可选)
如果追求代码紧凑,也可以把两步合并为一行:
var = {key: [d[key] for d in var] for key in set(var[0]).intersection(*var[1:])}
以上代码的核心逻辑是:对每个共有键,遍历原列表中的每一个字典,收集该键对应的所有值组成列表,最终将键与对应列表组合成新字典,赋值给原变量var。
内容的提问来源于stack exchange,提问作者Fravadona
相关产品推荐
相关产品推荐

