dictionary = {"key1": ["Item1", "Item2"], "key2": ["Item3", "Item4"]}
使用上面的字典,尝试遍历它并返回具有最多值的键。
我正在尝试这个:
def most_values(a):
return max(a, key=a.get)
虽然它会返回它首先检查的任何 key ,但这还不错。接下来我尝试了:
def most_values(a):
count = 0
high = ""
for t in a:
if len(a[t]) > count:
count += 1
high = t
return high
但它做同样的事情,并会返回它首先迭代的任何键。它也不是一个非常优雅的解决方案。
最Python 的处理方式是什么?
最佳答案
问题在于:
return max(a, key=a.get)
这里的键
将返回实际列表并且在Python中列表是按字典顺序比较的,所以不是按长度 (两种比较列表的方式都有话要说,但他们决定按字典顺序排序)。但是,您可以轻松地修改它:
def most_values(a):
return max(a, key=<b>lambda x:len(a[x])</b>)
这可能是最Python 的方式,因为它是声明式(您不必考虑如何计算最大值),< em>优雅,可读并且没有副作用。
第二种方法的问题是您应该将count
设置为新的len(a[t])
,而不是增加它.所以你可以像这样修复它:
def most_values(a):
count = <b>-1</b>
high = <b>None</b>
for <b>key,val</b> in a<b>.items()</b>:
if len(<b>val</b>) > count:
count<b> = len(val)</b> # semantical error in your code
high = <b>key</b>
return high
关于python - 确定具有最多值的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42463629/