gpt4 book ai didi

python - 键顺序无关紧要的多键字典

转载 作者:太空狗 更新时间:2023-10-29 18:18:58 25 4
gpt4 key购买 nike

我正在尝试创建一个以两个字符串作为键的字典,并且我希望这些键可以按任意顺序排列。

myDict[('A', 'B')] = 'something'
myDict[('B', 'A')] = 'something else'
print(myDict[('A', 'B')])

我希望这段代码打印“其他内容”。不幸的是,顺序似乎对元组很重要。用作键的最佳数据结构是什么?

最佳答案

使用frozenset

您可以使用 frozenset,而不是有序的 元组无序,同时 可散列 因为 frozenset不可变的

myDict = {}
myDict[frozenset(('A', 'B'))] = 'something'
myDict[frozenset(('B', 'A'))] = 'something else'
print(myDict[frozenset(('A', 'B'))])

将打印:

something else


不幸的是,这种简单性带来了一个缺点,因为 frozenset 基本上是一个“卡住”集。 frozenset中不会有重复值,例如

frozenset((1, 2)) == frozenset((1,2,2,1,1))

如果您不介意减少值,请随意使用 frozenset

但是,如果您 100% 确定不希望上述情况发生,则有两种选择:


第一个方法是使用一个Counter,并再次使用frozenset使其可散列:(< strong>注意:元组中的所有内容都必须可散列)

from collections import Counter

myDict = {}
myDict[frozenset(Counter(('A', 'B')).items())] = 'something'
myDict[frozenset(Counter(('B', 'A')).items())] = 'something else'
print(myDict[frozenset(Counter(('A', 'B')).items())])

# something else

第二种方法是使用内置函数sorted,并通过将其设为元组使其可散列。这将在将值用作键之前对值进行排序:(注意:元组中的所有内容都必须可排序可散列)

myDict = {}
myDict[tuple(sorted(('A', 'B')))] = 'something'
myDict[tuple(sorted(('B', 'A')))] = 'something else'
print(myDict[tuple(sorted(('A', 'B')))])

# something else

但是,如果元组元素既不是全部可散列,也不是全部可排序,不幸的是,您可能运气不好,需要创建自己的字典结构。 .. D:

关于python - 键顺序无关紧要的多键字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46633065/

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