2012-08-01 18 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 

ようなものになるだろうので、すべての名前は、2番目の要素です。基本的に名の数をカウントし、中に戻りたいですリストまたは

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

これをどのように効率的に行うことができますか?私は現在、手動で各名前を調べて数えて返します。/

ありがとうございます!

+0

1の位置だけでなく、i [x]によってアクセスする必要がある場合はどうなりますか?xは、要素がある位置です。値[x]は、d.itervaluesのすべてをトラバースするとうまくいかないようです。 – user1530318

答えて

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

+1

これはすでに辞書のようなオブジェクトですが、dict(c)を使って純粋な辞書にすることができます。 – monkut

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は、名前がキーと値として表示される回数として保存します。

関連する問題