Python字典最小值最大值
关于此代码,我有一个问题:dict中的元素数量在每次迭代中都会发生变化:Python字典最小值最大值,python,dictionary,max,min,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]) 如果“一”、“二”等的值不同,则一切正常 现在假设如下: d["one"] = 13 d["two"] =
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])
如果“一”、“二”等的值不同,则一切正常
现在假设如下:
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"
或
您可以将带有分钟的行更改为
minkey, minvalue = min(d.iteritems(), key=lambda x: x[1] if x[0] != maxkey else float('inf'))
我更改了lambda表达式,以便在键与maxkey相同时返回无穷大(因此它永远不会是最小值)。但是,如果字典中只有一对元素,这将不起作用,但可以使用if轻松修复。在查找最小值和最大值(优先级较低)时,可以考虑使用键:
因此,在寻找极值时,我不只是比较dict值,而是比较
(值,键)
元组。元组首先由第一个元素进行比较,即给定元组T1
和T2
,第一个T1[0]
与T2[0]
比较。如果T1[0]==T2[0]
,则比较第二个元素:T1[1]
和T2[1]
。因此,在我的例子中,比较dict键,如果值相等,即键与较低优先级进行比较能否请您给出一个专用/所需输出的示例?非常感谢您的回复。但是我希望它返回其他条目中的一个,就像上面的例子一样。可能吗?它将返回其他条目之一。不过,看看Lol4t0的答案。这是一个有点优雅(虽然效率稍低)伟大,非常感谢你,它的作品!你能解释一下“低优先级”是什么意思吗?我添加了更多信息
minkey, minvalue = min(d.iteritems(), key=lambda x: x[1] if x[0] != maxkey else float('inf'))
maxkey, maxvalue = max(d.iteritems(), key=lambda x: (x[1], x[0]))
minkey, minvalue = min(d.iteritems(), key=lambda x: (x[1], x[0]))