【问题标题】:Python Dictionary min maxPython字典最小值最大值
【发布时间】:2016-05-19 18:43:22
【问题描述】:

我有一个关于这段代码的问题:dict 中的元素数量在每次迭代时都不同:

d["one"] = 12
d["two"] = 13
d["three"] = 14

maxkey, maxvalue = max(d.iteritems(), key=lambda x:x[1])
minkey, minvalue = min(d.iteritems(), key=lambda x:x[1])

如果 "one" "twor" 等的值不同,则一切正常。

现在假设如下:

d["one"] = 13
d["two"] = 13


maxkey, maxvalue = max(d.iteritems(), key=lambda x:x[1])
minkey, minvalue = min(d.iteritems(), key=lambda x:x[1])

我想要以下结果:如果值相等,则 minkey, minvalue 不应与 maxkey, maxvalue 相同(如果有多个相等的条目,它应该是另一个条目/或其他条目之一)。有没有一种在 Python 中实现它的简单方法?非常感谢您的帮助

例子:

d["one"] = 12
d["two"] = 12
d["three"] = 12
minkey, minvalue = min(d.iteritems(), key=lambda x:x[1])
maxkey, maxvalue = max(d.iteritems(), key=lambda x:x[1])

结果

minkey = "three"
maxkey = "three"

但我想要,如果

minkey = "three"

那么 maxkey 应该是

maxkey = "one"

maxkey = "two"

【问题讨论】:

  • 您能否举一个专用/所需输出的示例?

标签: python dictionary max min


【解决方案1】:

你可以用 mins 把这一行改成

minkey, minvalue = min(d.iteritems(), key=lambda x: x[1] if x[0] != maxkey else float('inf'))

我更改了 lambda 表达式,以便在键与 maxkey 相同时返回无穷大(因此它永远不会是最小值)。但是,如果字典中只有一对元素,这将不起作用,但可以通过 if 轻松修复。

【讨论】:

  • 非常感谢您的回复。但我希望它返回其他条目之一 - 就像上面的例子一样。这可能吗?
  • 它将返回其他条目之一。不过,请查看 Lol4t0 的答案。它更优雅一些(虽然效率有点低)
【解决方案2】:

在查找最小值和最大值时可以考虑键(优先级较低):

maxkey, maxvalue = max(d.iteritems(), key=lambda x: (x[1], x[0]))
minkey, minvalue = min(d.iteritems(), key=lambda x: (x[1], x[0]))

因此,当发现极端情况时,我不只比较 dict values,而是比较 (value, key) tuple。元组首先通过第一个元素进行比较,即给定元组T1T2,首先将T1[0]T2[0] 进行比较。如果T1[0]==T2[0],则比较第二个元素:T1[1]T2[1]。因此,在我的情况下,如果值相等,则比较 dict 键,即键与较低优先级进行比较

【讨论】:

  • 太好了,非常感谢,它有效!你能解释一下“优先级较低”是什么意思吗?
  • 我添加了更多信息
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 2021-07-30
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 2016-04-14
  • 2017-08-09
  • 2020-06-06
相关资源
最近更新 更多