2013-02-07 59 views
4

我有一本字典,如下所示。在字典中計數值

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

我通過格言和輸出,將顯示我格言具有的價值不止一個「鴨」鍵列表希望能循環。

例如,對於dictA這個函數會輸出下面的列表。

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

我確信有一個簡單的方法來做到這一點,但我是Python的新手,這讓我難倒了。

+0

你能接受答案來標記問題已解決嗎?這也會幫助其他用戶。 – MERose

回答

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

這是做這件事的好方法;只有在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答案中的列表理解更容易理解。

+0

我認爲初學者需要學習pythonicly做事情。 – jurgenreza

+0

@jurgenreza,在列表解析出現之前,這是Pythonic的方式。 –

+0

我的不好。你的代碼沒有非pythonic。當我看到理解解決方案時,只是過度興奮。 – jurgenreza

3

只爲它赫克 - 這裏是其他,其他方式:

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

Counter是 - 你猜對了 - 計數的東西。