gpt4 book ai didi

python - 无序列表作为字典键

转载 作者:行者123 更新时间:2023-12-03 14:06:31 24 4
gpt4 key购买 nike

关闭。这个问题需要details or clarity .它目前不接受答案。












想改善这个问题吗?通过 editing this post 添加详细信息并澄清问题.

11 个月前关闭。




Improve this question




我希望能够执行以下操作:

foo = Counter(['bar', 'shoo', 'bar'])
tmp = {}
tmp[foo] = 5
换句话说,是否有 Counter 的可哈希等价物? ?
请注意,我不能使用 frozenset因为我有重复的元素,我想保留在关键中。
编辑:
在我的实际应用中, foo 中的对象可能无法相互比较,因此无法对列表进行排序。

最佳答案

您似乎需要的是一种使用无序键数量对作为键的方法。一个 frozenset可能是要走的路,尽管您必须从 items 中创建它的Counter而不是它的 keys .

foo = Counter(['bar', 'shoo', 'bar'])
tmp = {}
tmp[frozenset(foo.items())] = 5

# tmp: {frozenset({('bar', 2), ('shoo', 1)}): 5}
如果这令人满意,您可以通过定义您自己的映射类型来实现此转换,如下所示:
from collections import Counter

class CounterDict:
def __init__(self):
self.data = {}

def __setitem__(self, key, value):
if isinstance(key, Counter):
self.data[frozenset(key.items())] = value
else:
raise TypeError

def __getitem__(self, key):
if isinstance(key, Counter):
return self.data[frozenset(key.items())]
else:
raise TypeError

foo = Counter(['bar', 'shoo', 'bar'])
tmp = CounterDict()
tmp[foo] = 42
tmp[foo] # 42
您可以通过制作 CounterDict 来使这个实现更加丰富。 collections.UserDict 的子类.

关于python - 无序列表作为字典键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64616582/

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