2012-08-01 54 views
7

我有一個列表字典,我想爲其添加一個值到一個特定的列表... 我有以下的列表字典。列表字典中Python項目的數量

d = {'a': [4,'Adam', 2], 'b': [3,'John', 4], 'c': [4,'Adam', 3], 'd': [4,'Bill' 3], 'e': [4,'Bob'], 'f': [4, 'Joe'], 'g': [4, 'Bill']} 

我想基本上是算出來的名字的數量和返回,所以在這種情況下,它會是這樣的

Adam: 2 
Bill: 2 
John: 1 
Bob: 1 
Joe: 1 

爲了方便起見,所有的名字都在第二個元素列表或

for i in d: 
    d[i][1] 

任何想法如何能有效地做到這一點?我目前只是手動檢查每個名稱並計算並返回=/

在此先感謝!

+0

如果它不僅位於1位置,如果必須通過i [x]訪問,其中x是元素所在的某個位置,會發生什麼?值[x]似乎不起作用,如果你遍歷所有的d.itervalues – user1530318 2012-08-01 23:38:12

回答

17

collections.Counter總是很好的計數的東西。

>>> from collections import Counter 
>>> d = {'a': [4,'Adam', 2], 'b': [3,'John', 4], 'c': [4,'Adam', 3], 'd': [4,'Bill', 3], 'e': [4,'Bob'], 'f': [4, 'Joe'], 'g': [4, 'Bill']} 
>>> # create a list of only the values you want to count, 
>>> # and pass to Counter() 
>>> c = Counter([values[1] for values in d.itervalues()]) 
>>> c 
Counter({'Adam': 2, 'Bill': 2, 'Bob': 1, 'John': 1, 'Joe': 1}) 
+0

看起來不錯! 任何方式來刪除「計數器」的部分,只是用數字返回該列表? – user1530318 2012-08-01 18:38:36

+1

它已經是一個類似字典的對象,但是你可以用dict(c)將它變成一個純字典。 – monkut 2012-08-06 00:20:03

1
d = {'key': 'value'} 
temp_dict = {} 
for key, values in d.items(): 
    if values[1] in temp_dict: 
     temp_dict[values[1]] = temp_dict[values[1]] + 1 
    else: 
     temp_dict[values[1]] = 1 

這段代碼比以前的答案更長的時間,但它只是另一種方式來產生相同的結果。無論如何,temp_dict將存儲名稱作爲鍵和值作爲它顯示的次數。