Python 词典最小最大

Python Dictionary min max

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

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不一样(应该是另外一个entry/or如果有几个相等条目)。在 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"

您可以将带有分钟的行更改为

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

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

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

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) 元组。元组首先与第一个元素进行比较,即给定元组 T1T2,首先 T1[0]T2[0] 进行比较。如果 T1[0]==T2[0],则比较第二个元素:T1[1]T2[1]。因此,在我的例子中,如果值相等,则比较字典键,即键与较低优先级进行比较