Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字典最小值最大值_Python_Dictionary_Max_Min - Fatal编程技术网

Python字典最小值最大值

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"] =

关于此代码,我有一个问题: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"] = 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]))