python - 我需要一种方法将多个键映射到字典中的相同值

标签 python python-3.x dictionary

不可否认,这个问题似乎很受欢迎,但我真的找不到它(也许我没有使用正确的搜索词)。不管怎样,我需要这样的东西:

tel = {}
tel['1 12'] = 1729
tel['9 10'] = 1729
tel['1 2'] = 9
tel['2 1'] = 9
tel['1 1'] = 2
print(tel)

{['1 1'] : 2, ['1 2', '2 1'] : 9, ['1 12', '9 10'] : 1729}

因此,只要一个键的值已经在字典中,就将该键附加到映射到该值的键列表中;否则,将键值对添加到字典中。

编辑 如果我让你们很多人感到困惑,我很抱歉,如果以下内容让你们更加困惑,我真的很抱歉:)

这是我最初想要解决的问题:给定方程 a^3 + b^3,生成一个字典,将 a、b 小于 1000 的所有正整数对值映射到计算时的方程值。当两对评估为相同的值时,我希望这两对在字典中共享相同的值并且以某种方式分组在一起。 (我已经知道我可以将不同的键映射到字典中的相同值,但我需要这种分组)。

因此我的伪代码示例将由以下人员给出:

for a in range(1, 1000):
    for b in range(1, 1000):
        map pair (a, b) to a^3 + b^3

对于某些整数对 (a, b) 和 (p, q),其中 a != p 和 b != q,a^3 + b^3 == p^3 + q^3。我希望这些对以某种方式组合在一起。例如,[(1, 12), (9, 10)] 映射到 1729。我希望这能让我更清楚我想要什么。

编辑2 正如你们中的许多人指出的那样,如果这意味着更快的查找时间,我将切换键值对。这意味着虽然键值对中的值需要是元组。

最佳答案

正如许多评论已经指出的那样,您的键/值 结构似乎颠倒了。我建议将您的 int 值分解为 keys 。通过这种方式,您可以使用 int 值作为键来实现高效的字典查找,并在您的数据中实现更优雅的简单设计 - 使用字典作为 intended .

例如:{9: ('1 2', '2 1'), 2: ('1 1',), 1729: ('9 10', '1 12')}

话虽如此,下面的代码片段将满足您的要求。它首先如上所示映射数据,然后从根本上反转键/值。

tel = {}
tel['1 12'] = 1729
tel['9 10'] = 1729
tel['1 2'] = 9
tel['2 1'] = 9
tel['1 1'] = 2
#-----------------------------------------------------------
from collections import defaultdict

new_tel = defaultdict(list)
for key, value in tel.items():
    new_tel[value].append(key)

# new_tel -> {9: ['1 2', '2 1'], 2: ['1 1'], 1729: ['9 10', '1 12']}
print {tuple(key):value for value, key in new_tel.items()}
>>> {('1 2', '2 1'): 9, ('1 1',): 2, ('9 10', '1 12'): 1729}

关于python - 我需要一种方法将多个键映射到字典中的相同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38902324/

相关文章:

python - 如何在 Python 3.6 中执行 2 个协程

python - django 'QuerySet' 对象中的反向关系没有属性 'name'

python - 将 PanedWindow 分隔符 "snap"放置到某些位置,而不是只允许用户选择任何随机位置

python-3.x - VS Code 调试 python 脚本配置忽略 args 属性

javascript - 什么可能是 javascript 中 iteritems() [来自 python] 的替代品

ios - 如何合并两个仅包含唯一值的字典

python - django v1.10 mysite.com 的 urls.py 条目 :8000/index. html

python - 使用 matplotlib 从 pcolormesh 动画四边形网格

python - 在 python 3 中,如何将数据从二维数组传输到 csv 文本文件

c# - GetHashCode 已实现,但 Dictionary 无法找到 key ?