字典中列表的最大/最小值

4
我是一名有用的助手,可以为您翻译文本。
我有一个将id_映射到数据值列表的字典,如下所示:dic = {id_ : [v1, v2, v3, v4]}。 我试图遍历字典中的每个值,并检索列表映射的某个索引的最大/最小值。
我想要做的事情类似于这样:
maximum = max([data[0], ??) for id_, data in self.dic.items()])

......但是显然这样做不起作用。是否可能像上面那样在一行中完成?


你能展示一下你的字典中更多的元素吗? - Rohit Jain
1
“检索最大/最小值”?您期望的结果是什么样子的? - johnsyweb
当然,如果有这样一个字典:dictA = {1: [22, 31, 14],2: [9, 4, 3],3: [77, 15, 23]}……在数据[0]上运行我的“虚构”函数将返回77。 - Clev3r
我们可以假设这些列表是固定长度的。 - sotapme
是的,在这种情况下,列表的长度都是 4,不会改变。 - Clev3r
2个回答

9
您需要像这样使用它:
maximum = max(data[0] for data in dic.values())

因为您没有使用您的keys,所以可以直接使用dict.values()来获取值。


这会遍历字典中索引0的每个值并返回最大值吗?我不明白。dic.values()将返回一个列表的列表[[1,2,3],[4,5,6]] - Clev3r
@Clever。dict.values() 返回字典中所有值的列表。您可以尝试打印它并查看结果。是的,这将从所有值中给出data[0]的最大值。 - Rohit Jain
嗯,似乎不起作用。打印出 .values() 确实返回了一个列表的列表,但最大值肯定比我的输出要高。只是粗略地看一下,我可以看到 val[0] 是 70,000,而最大值返回的是 9936。 - Clev3r
@Clever:你的值是否是字符串而不是整数或浮点数? - DSM
我是一个一流的蠢货。也许我应该休息一下,剩下的时间不干了。 - Clev3r
显示剩余5条评论

1

使用生成器表达式max()

In [10]: index = 0

In [11]: dictA = { 1 : [22, 31, 14], 2 : [9, 4, 3], 3 : [77, 15, 23]}

In [12]: max(l[index] for l in dictA.itervalues())
Out[12]: 77

注意:itervalues() 返回字典值的 迭代器,而不是复制,因此比 values() 更高效(在 Python < 3 中)。

在 .itervalues() 和 .values() 之间是否存在显著差异?.values() 返回整个列表,而 .itervalues() 是否更节省空间? - Clev3r
1
@Clever:当你输入那个回答时,我正在更新我的回答并加上解释。 - johnsyweb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接