Python Dictionary min max

时间:2016-02-09 17:02:56

标签: python dictionary max min

我对此代码有疑问: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"

2 个答案:

答案 0 :(得分:3)

你可以在找到min& amp; max(优先级较低):

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 ,而是(value, key)元组。元组首先由第一个元素进行比较,即给定元组T1T2,首先T1[0]T2[0]进行比较。如果T1[0]==T2[0],则会比较第二个元素:T1[1]T2[1]。因此,在我的情况下,如果值相等,则比较dict键,即将键与较低优先级进行比较

答案 1 :(得分:2)

您可以将包含分钟的行更改为

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

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