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']

それを理解すると、イグナシオの回答のリスト内包表記が理解しやすくなります。

于 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 に答える