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)
元组。元组首先与第一个元素进行比较,即给定元组 T1
和 T2
,首先 T1[0]
与 T2[0]
进行比较。如果 T1[0]==T2[0]
,则比较第二个元素:T1[1]
和 T2[1]
。因此,在我的例子中,如果值相等,则比较字典键,即键与较低优先级进行比较
我有一个关于这段代码的问题:字典中的元素数量在每次迭代中都不同:
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)
元组。元组首先与第一个元素进行比较,即给定元组 T1
和 T2
,首先 T1[0]
与 T2[0]
进行比较。如果 T1[0]==T2[0]
,则比较第二个元素:T1[1]
和 T2[1]
。因此,在我的例子中,如果值相等,则比较字典键,即键与较低优先级进行比较