7

特定のリストに値を追加したいリストの辞書があります... 次のリストの辞書があります。

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]

これを効率的に行う方法はありますか?私は現在、各名前を手動でチェックし、カウントして返しています=/

前もって感謝します!

4

2 に答える 2

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})
于 2012-08-01T00:52:50.247 に答える
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表示される回数として名前をキーと値として保存します。

于 2012-08-01T01:32:07.557 に答える