【发布时间】:2020-10-30 22:30:56
【问题描述】:
我希望能够做类似的事情:
foo = Counter(['bar', 'shoo', 'bar'])
tmp = {}
tmp[foo] = 5
换句话说,Counter 是否有可散列的等价物?
请注意,我不能使用 frozenset,因为我有重复的元素,我想保留在键中。
编辑: 在我的实际应用中, foo 中的对象可能无法相互比较,因此无法对列表进行排序。
【问题讨论】:
-
摆脱
Counter,对列表进行排序,转换为元组并将其用作键? (魔鬼的倡导者找到你的实施的限制) -
列表可以有多长?这是合理的还是我们在谈论数千?对列表元素有任何限制吗?一种快速的解决方案(如果列表很短并且其中不能包含某个特殊字符)是对列表进行字符串化。例如
key = '|'.join(['bar', 'shoo', 'bar'])。您可以稍后通过拆分特殊字符来重新创建列表 -
不幸的是,Python 对此没有很好的解决方案。我会选择上面@roganjosh 的解决方案。如果会有很多重复,也许将所有内容都变成(项目计数)的元组。然后,这些元组可以放入frozenset。
-
@sedavidw 不要忘记对列表进行排序 :)
-
frozenset(foo.items())有什么问题?
标签: python python-3.x dictionary