擅长:python、mysql、java
<p>您似乎需要的是一种将无序的密钥数量对用作密钥的方法。一个<code>frozenset</code>可能是一种方法,尽管您必须从<code>Counter</code>的<code>items</code>中创建它,而不是它的<code>keys</code></p>
<pre><code>foo = Counter(['bar', 'shoo', 'bar'])
tmp = {}
tmp[frozenset(foo.items())] = 5
# tmp: {frozenset({('bar', 2), ('shoo', 1)}): 5}
</code></pre>
<p>如果这是令人满意的,您可以通过定义自己的映射类型来实现此转换,如下所示:</p>
<pre><code>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
</code></pre>
<p>通过使<code>CounterDict</code>成为<code>collections.UserDict</code>的子类,可以使这个实现更加丰富</p>