我一直致力于收集数据的任务,并计算从大数据集中出现的每件事物大约500mb的次数。我有几本词典在阅读csv文件并将数据放在一起,在收集完所有数据并进行处理后,我的最终词典看起来像这样。
我差不多完成了这个分配但是我坚持这一部分,我需要找到所有键和值之间的前5个最大值。
我有以下字典:
printed using: print key, task1[key]
KEY KEYVALUE
WA [[('1082225', 29), ('845195', 21), ('265021', 17)]]
DE [[('922397', 44), ('627084', 40), ('627297', 14)]]
DC [[('774648', 17), ('911624', 17), ('771241', 16)]]
WI [[('12618', 25), ('242582', 23), ('508727', 22)]]
WV [[('476050', 4), ('1016620', 3), ('769611', 3)]]
HI [[('466263', 5), ('226000', 5), ('13694', 4)]]
我非常需要查看前5个值及其ID号。 例如
最好的方法是什么?
**编辑 我如何整理我的任务词典
task1 = {}
for key,val in courses.items():
task1[key] = [sorted(courses[key].iteritems(), key=operator.itemgetter(1), reverse=True)[:5]]
答案 0 :(得分:2)
假设您的dict
看起来像:
mydict = {'WA': [('1082225', 29), ('845195', 21), ('265021', 17)],
'DE': [('922397', 44), ('627084', 40), ('627297', 14)],
...}
这不是理想的表现形式。如果你运行它,你可以将列表展平为更好的格式:
data = [(k, idnum, v) for k, kvlist in mydict.items() for idnum, v in kvlist]
现在数据看起来像是:
[('WA', '1082225', 29),
('WA', '845195', 21),
('WA', '265021', 17),
('DE', '922397', 44),
...]
在这种格式中,数据清晰可读,显而易见的是我们需要搜索的内容。此行将根据其[2]
值按降序对新元组进行排序:
sorted(data, key=lambda x: x[2], reverse=True)
注意:您提供的字典有一个不必要的[]
,所以为了清楚起见,我将其从答案中删除了。
澄清后编辑。