4

我有一本字典如下。

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

我希望遍历 dictA 并输出一个列表,该列表将显示 dictA 中具有多个“鸭子”值的键。

例如,对于 dictA,此函数将输出以下列表。

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

我确信有一种简单的方法可以做到这一点,但我是 Python 新手,这让我很困惑。

4

3 回答 3

13
[k for (k, v) in dictA.iteritems() if v.count('duck') > 1]
于 2013-02-07T04:18:39.230 回答
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 的答案中的列表理解更容易理解。

于 2013-02-07T04:29:06.510 回答
3

只是为了它 - 这是一种方式:

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

Counter是为了——你猜对了——计算东西。

于 2013-02-07T04:44:30.673 回答