字典中值的计数

4 投票
3 回答
24250 浏览
提问于 2025-04-17 15:03

我有一个字典,内容如下。

dictA = { 
    'a' : ('duck','duck','goose'), 
    'b' : ('goose','goose'), 
    'c' : ('duck','duck','duck'), 
    'd' : ('goose'), 
    'e' : ('duck','duck') 
    }

我想遍历这个字典(dictA),并输出一个列表,显示在字典中值为“duck”的键,如果这个值出现超过一次的话。

比如,对于这个字典(dictA),这个功能会输出下面的列表。

list = ['a', 'c', 'e']

我相信有简单的方法可以做到这一点,但我刚学Python,这让我有点困惑。

3 个回答

3

随便说说,这里还有另外一种方法:

>>> from collections import Counter
>>> [i for i in dictA if Counter(dictA[i])['duck'] > 1]
['a', 'c', 'e']

Counter 是用来 - 你猜对了 - 计数的工具。

4

我觉得这对初学者来说是个好方法。不要把你的列表命名为 list,因为Python里已经有一个叫 list 的内置功能了。

>>> dictA = { 
...     'a' : ('duck','duck','goose'), 
...     'b' : ('goose','goose'), 
...     'c' : ('duck','duck','duck'), 
...     'd' : ('goose'), 
...     'e' : ('duck','duck') 
...     }
>>> my_list = []
>>> for key in dictA:
...     if dictA[key].count('duck') > 1:
...         my_list.append(key)
... 
>>> my_list
['a', 'c', 'e']

接下来可以使用 .items(),这样你就不需要为每个键单独查找对应的值了。

>>> my_list = []
>>> for key, value in dictA.items():
...     if value.count('duck') > 1:
...         my_list.append(key)
... 
>>> my_list
['a', 'c', 'e']

当你理解了这些之后,你会发现Ignacio的回答中的列表推导式更容易理解。

13
[k for (k, v) in dictA.iteritems() if v.count('duck') > 1]

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

撰写回答