我有一个使用 Python3.x 列表字典的算法问题,尽管也许另一种数据结构更合适。
假设我有以下 Python 字典:
dict1 = {1:[4, 12, 22], 2:[4, 5, 13, 23], 3:[7, 15, 25]}
键 1
与值 [4, 12, 22]
关联表示 1 与 4“关联”。1 也与 12 关联,并且 1与 22 相关联。另外,2 与 4 相关联,2 与 5 相关联,2 与 13 相关联,1 与 23 相关联,等等。
我的问题是,对于这个小例子,我如何“展开”这个字典,以便值列表的每个元素都对这个“关联”进行编码?
也就是说,最终的结果应该是:
intended_dict = {1:[4, 12, 22], 2:[4, 5, 13, 23], 3:[7, 15, 25],
4:[1, 2], 5:[2], 12:[1], 13:[2], 15:[3], 22:[1], 23:[2], 25:[3]}
因为 4 与 1 相关联,所以 4 与 2 相关联,5 与 2 相关联,等等。
有没有办法像这样“展开”字典?
这将如何扩展到包含包含数百万整数的更大列表的更大字典?
也许另一种数据结构在这里会更有效,尤其是对于更大的列表?
编辑:考虑到我正在使用的实际字典的大小(不是上面发布的那个),解决方案应该尽可能地提高内存/性能效率。
最佳答案
简单的一行:
newdict={v:[i for i in dict1.keys() if v in dict1[i]] for k,v in dict1.items() for v in v}
print(newdict)
输出:
{4: [1, 2], 12: [1], 22: [1], 5: [2], 13: [2], 23: [2], 7: [3], 15: [3], 25: [3]}
合并它们:
print({**dict1,**newdict})
关于python - 如何展开基于键值 "pairs"的 python 列表字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52133506/