键列表,如何在字典中查找最大值

2024-05-21 00:43:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在做一个作业,收集数据,计算每件事在一个大约500mb的大数据集中出现的次数。我有两个字典读取csv文件,并把数据放在一起,我最后的dict看起来像这样,在所有的数据已经收集和工作。你知道吗

我几乎完成了分配,但在这一节卡住了,我需要找到前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号。 例如

  1. 德国922397 44
  2. 德国627084 40
  3. 华盛顿州1082225 29

最好的办法是什么?你知道吗

**编辑 我是如何整理我的任务字典的

task1 = {}
for key,val in courses.items():
    task1[key] = [sorted(courses[key].iteritems(), key=operator.itemgetter(1), reverse=True)[:5]]

Tags: 文件csv数据key字典作业次数dict
1条回答
网友
1楼 · 发布于 2024-05-21 00:43:44

假设你的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)

注意:您提供的字典中有一个不必要的[],因此为了清楚起见,我将其从答案中删除。你知道吗

澄清后编辑。

相关问题 更多 >