さて、この問題への古典的なアプローチは、defaultdictを作成するには、次のようになります。
import collections
histogram = collections.defaultdict(int)
そして、辞書のリストの名前としてd_list
代わりのd
を使用してリストに辞書を反復し、( )、
for d in d_list:
histogram[d['age']] += 1
しかし、私に混乱する追加情報が記載されています。あなたは、複数のdictが同じユーザーを表すことができると言っています。これらの重複をヒストグラムから削除したいですか?それがあなたの疑問である場合、1つの方法はの辞書にユーザーを格納することです。(firstname, lastname)
タプルをキーとして使用します。その後、同じユーザーを表す連続した辞書が互いに打ち砕かれ、ユーザーごとに1つのレコードしか保存されませんでした。その後、の値を辞書(おそらくuser_records.itervalues()
を使用)に繰り返します。
この一般的なアプローチは、一意のユーザーを識別するのに最適な各レコードの値を使用するように変更できます。 user_id
の値がユーザーごとに一意の場合は、(firstname, lastname)
の代わりにその値をキーとして使用します。しかし、あなたの質問は、user_id
が同じ2人のユーザーにとって必ずしも同じではないと(私に)示唆しました。
あなたが排除重複を持っていたら、あなたは、Python> = 2.7を使用している場合しかし、ショートカットもあります:
histogram = collections.Counter(d['age'] for d in user_records.itervalues())
いくつかのサンプルコードを...我々はrecord_list
を持っていると言う:
>>> record_list
[{'lastname': 'Mann', 'age': 23, 'firstname': 'Joe'},
{'lastname': 'Moore', 'age': 23, 'firstname': 'Alex'},
{'lastname': 'Sault', 'age': 33, 'firstname': 'Marie'},
{'lastname': 'Mann', 'age': 23, 'firstname': 'Joe'}]
>>> user_ages = dict(((d['firstname'], d['lastname']), d['age']) for d in record_list)
>>> user_ages
{('Joe', 'Mann'): 23, ('Alex', 'Moore'): 23, ('Marie', 'Sault'): 33}
ご覧のとおり、record_list
には重複がありますが、user_ages
dictはありません。現在、年齢のカウントを取得するのは、値をCounter
で実行するのと同じくらい簡単です。
>>> collections.Counter(user_ages.itervalues())
Counter({23: 2, 33: 1})
同じことは、特定のユーザーの一意の識別子として機能する任意の文字列または不変オブジェクトで行うことができます。
これを拡張できますか:「(firstname、lastname)タプルをキーとしてuser_recordsの辞書にユーザーを格納する方法があります。その後、同じユーザーを表す連続した辞書が互いに衝突し、保存される。 – ashim
実際には "Python> = 2.7"を意味することに注意してください。 :) – Dougal
文字列のタプルを辞書のキーにすることができ、指定されたキーは辞書に一度しか表示できないため、重複は自動的に削除されます。いくつかのサンプルコードを投稿します。 – senderle