【问题标题】:Max/Min value of Dictionary of List列表字典的最大值/最小值
【发布时间】:2023-03-29 18:15:01
【问题描述】:

我有一个字典,将 id_ 映射到数据值列表,如下所示:dic = {id_ : [v1, v2, v3, v4]}。 我正在尝试遍历字典中的每个值并检索列表映射的某个索引的最大值/最小值。

我想做的是这样的:

maximum = max([data[0], ??) for id_, data in self.dic.items()])

...但显然这行不通。是否可以像上面那样在一行中做到这一点?

【问题讨论】:

  • 你能在你的字典中显示更多元素吗?
  • “检索最大值/最小值”?您希望结果是什么样的?
  • 当然,给定这样的字典:dictA = { 1 : [22, 31, 14], 2 : [9, 4, 3], 3 : [77, 15, 23]}... 在 data[0] 上运行我的 'imaginary' func 将返回 77。
  • 我们可以假设列表是固定长度的。
  • 是的,在这种特殊情况下,列表的长度都是 4 并且不会改变。

标签: python


【解决方案1】:

你需要像这样使用它:

maximum = max(data[0] for data in dic.values())

由于您没有使用 keys,因此只需使用 dict.values() 即可获取值。

【讨论】:

  • 这会遍历字典中索引 0 的每个值并返回最大值吗?我不明白怎么做。 dic.values() 将返回列表列表 [[1,2,3],[4,5,6]]
  • @Clever。 dict.values() 返回字典中所有值的列表。你可以试着打印出来看看你得到了什么。是的,这将在所有值中给出数据 [0] 的最大值。
  • 嗯,好像没用。打印出 .values() 确实会返回一个列表列表,但最大值肯定高于我的输出。只是对它上釉,我可以看到 val[0] 为 70,000,而最大值返回 9936。
  • @Clever:你的值是字符串而不是整数或浮点数吗?
  • @Clever。你有什么意见?
【解决方案2】:

使用generator expressionmax()

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() 在字典的值上返回一个iterator 而不进行复制,因此比values() 更有效(在 Python

【讨论】:

  • .itervalues() 和 .values() 之间是否存在显着差异?会不会是 .values() 返回整个列表,而 .itervalues() 对空间更保守?
  • @Clever:我正在更新我的答案,而你输入了解释。
猜你喜欢
  • 2016-05-19
  • 2012-07-28
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 2017-08-09
  • 2012-07-28
相关资源
最近更新 更多