gpt4 book ai didi

python - 在 python 中,如何反转 2D 字典?

转载 作者:太空宇宙 更新时间:2023-11-03 12:53:25 28 4
gpt4 key购买 nike

我有以下形式的字典

dict = {
"a" : {"a1" : 1},
"b" : {"a2" : 1, "a3" : 2},
"c" : {"a2" : 3, "a4" : 3}
}

我需要反向索引字典,格式如下:

inverseDict = {
"a1" : {"a" : 1},
"a2" : {"b" : 1, "c" : 3},
"a3" : {"b" : 2},
"a4" : {"c" : 3}
}

基本上

inverseDict = {dict.value.key : { dict.key : dict.value.value}}

所以本质上,我需要值的键作为键,键作为值的键,同时加入重复的新键等的结果。

我试过

ks = dict.keys()
vals = dict.values()

ks2 = vals.keys()
vals2 = vals.values()

如果这有任何意义

但是我得到一个错误

'dict_values' object has no attribute 'keys'

据我所知,这是因为 dict.values() .keys() .items() 返回“ View ”而不是实际元素本身,但我不知道如何解决这个问题。

还有我应该考虑的更有效的解决方案,因为我的实际字典非常大(~10k 键),并且生成的逆字典也很大(>3k 键)

最佳答案

使用 collections.defaultdict(dict)和一个双循环,这很容易:

d = {
"a" : {"a1" : 1},
"b" : {"a2" : 1, "a3" : 2},
"c" : {"a2" : 3, "a4" : 3},
}

import collections

inverted = collections.defaultdict(dict)

for key,subd in d.items():
for k,v in subd.items(): # no inspiration for key/value names...
inverted[k][key] = v

反转

{'a1': {'a': 1},
'a2': {'b': 1, 'c': 3},
'a3': {'b': 2},
'a4': {'c': 3}}

使用 defaultdict 避免测试条目是否已经存在,如果不存在则创建字典值。因此,只需按预期顺序无脑添加键/值即可。

请注意,那些需要将项目处理成多个对象的问题很难使用理解来解决。

关于python - 在 python 中,如何反转 2D 字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53161542/

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