我是python的新手,正在学习如何以正确的方式做事.
我有词典列表d.每个字典代表用户,并包含user_id,age等信息.此列表d可以包含代表同一用户的几个字典(但信息略有不同,这与我的目的无关).我想创建直方图,显示给定年龄的d中有多少用户.如何以有效的方式做到这一点?
编辑:
我想强调一下,我需要消除列表中的重复项.
解决方法:
那么,解决这个问题的经典方法是创建一个defaultdict:
import collections
histogram = collections.defaultdict(int)
然后遍历列表中的字典,并使用d_list而不是d作为字典列表的名称,
for d in d_list:
histogram[d['age']] += 1
但是你包含了令我困惑的其他信息.你说多个dicts可以代表同一个用户.你想从直方图中消除那些重复吗?如果这是你的问题,一种方法是将用户存储在user_records的dict中,使用(firstname,lastname)元组作为键.然后,表示同一用户的连续词典将相互粉碎,并且每个用户仅保留一个记录.然后迭代该字典中的值(可能使用user_records.itervalues()).
可以修改此一般方法以使用每个记录中的任何值来最佳地标识唯一用户.如果user_id值对于每个用户是唯一的,则使用该值作为键而不是(firstname,lastname).但是你的问题(对我而言)建议对于两个相同的用户,user_id不一定相同.
但是,一旦你有了删除的重复项,如果你使用的是Python> = 2.7,那么还有一个快捷方式:
histogram = collections.Counter(d['age'] for d in user_record