python - 如何展开基于键值 "pairs"的 python 列表字典?

标签 python python-3.x dictionary key-value

我有一个使用 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/

相关文章:

python - 将Excel中的列表存储到字典中

python - C++ Python Boost 中的友元函数

python - 捕获单个任务中的异常并重新启动它们

python - 如何访问Python列表中字典中的项目?

python - 拆分,将数据映射到 Pandas 数据框中的两列中

python - 如何使用带有 Tensorflow 的 Docker 在 Mac 终端上运行 Python 脚本?

python - 为什么 vim 红色突出显示 Django 模板中的结束标签?

python - 无法将 'NoneType' 对象隐式转换为 str

ios - 多维字典添加 'Key:Value'被覆盖

dictionary - 从记录列表生成字典