我对此代码有疑问: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"
答案 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)
元组。元组首先由第一个元素进行比较,即给定元组T1
和T2
,首先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轻松修复。