在字典中计算值的数量

4
我有一个如下的字典。
dictA = { 
    'a' : ('duck','duck','goose'), 
    'b' : ('goose','goose'), 
    'c' : ('duck','duck','duck'), 
    'd' : ('goose'), 
    'e' : ('duck','duck') 
    }

我希望能够遍历dictA并输出一个列表,该列表将显示dictA中在值中具有超过一个“duck”的键。
例如,对于dictA,此函数将输出以下列表。
list = ['a', 'c', 'e']

我相信有一个简单的方法来解决这个问题,但我对Python还很陌生,所以这让我感到困惑。


你可以接受一个答案来标记问题已解决吗?这将有助于其他用户。 - MERose
3个回答

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

这是一个很好的做法;只是在 Python 3.3 中没有 dict.iteritems(),你需要将其替换为 dict.items()。 - jurgenreza

4

我认为这是初学者的好方法。不要把你的列表命名为list - 已经有一个内置函数叫做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的回答中的列表推导更容易理解。

在引入列表推导之前,这 Pythonic 的方式。 - John La Rooy
我的错。你的代码没有任何非Pythonic的问题。只是当我看到这个解决方案时有些过于兴奋了。 - jurgenreza

3

仅仅是为了好玩 - 这里是另一种方式:其他方式:

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

Counter 是用来进行计数的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接