gpt4 book ai didi

python - 根据重复值从字典创建嵌套字典

转载 作者:太空宇宙 更新时间:2023-11-04 09:43:42 25 4
gpt4 key购买 nike

我是 Python (3.6) 的新手,我正在尝试找出一种从列表列表中创建嵌套字典的方法。示例输入是:

myList = [[1, B, C],[1, D, C],[1, E, C],[1, F, G],[1, H, G],[2, I, C],[2, J, C],[2, K, G]]

我想得到的是:

result = {1: {C: [B, D, E], G: [F, H]}, 2: {C: [I, J], G: [K]}}

我现在得到的是:

result = defaultdict(list)
for key, *values in myList:
result[key].extend(values)

这给了我输出:

{1: [B, C, D, C, E, C, F, G, H, G], 2: [I, C, J, C, K, G]}

我正在寻找一种创建嵌套字典的方法,其中键的值列表中的每个重复值都成为子字典的键。考虑到我正在处理大型数据集,您能否建议我考虑采用哪些方法?到目前为止,我所做的有一个重大缺陷,因为我丢失了关于应该将哪个值分配给子词典中的哪个键的信息。

最佳答案

你可以在这里使用defaultdict,但是只传递list是行不通的,因为你不想要一个值为列表的字典;你想要一个字典,其值是字典,每个字典的值都是列表。所以你必须将第二层 defaultdict 传递给第一个 defaultdict

from collections import defaultdict

seq = [[1, 'B', 'C'],[1, 'D', 'C'],[1, 'E', 'C'],[1, 'F', 'G'],[1, 'H', 'G'],[2, 'I', 'C'],[2, 'J', 'C'],[2, 'K', 'G']]
d = defaultdict(lambda: defaultdict(list))
for key1, value, key2 in seq:
d[key1][key2].append(value)

print(d)

结果:

defaultdict(<function <lambda> at 0x00DEC6A8>, {1: defaultdict(<class 'list'>, {'C': ['B', 'D', 'E'], 'G': ['F', 'H']}), 2: defaultdict(<class 'list'>, {'C': ['I', 'J'], 'G': ['K']})})

... 逐项等效于 {1: {'C': ['B', 'D', 'E'], 'G': ['F', ' H']}, 2: {'C': ['I', 'J'], 'G': ['K']}}

关于python - 根据重复值从字典创建嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50684079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com