python - 确定具有最多值的键

标签 python dictionary

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/

相关文章:

java - GAE应用程序开发: NullPointerException when returning a hashmap

python - 在 Python 字典中如何根据键的第一个值找到一个?

python - 根据分隔符拆分字符串列并将其转换为 Pandas 中的字典,无需循环

python - 在另一个列表的嵌套列表中比较/查找列表

python - 在线性时间内找到总和 >= k 的 n 个整数的最小子数组

python - python,del或delattr哪个更好?

python - 我如何首先根据它们的单位(bit/s、Kbit/s 等)对特定的字典列表进行排序,然后根据它们的值对它们进行排序

c# - 检查字典中是否有给定的字符串

python - 将键添加到 defaultdict(dict)

python - 使用 pandas.read_csv 将逗号分隔的字符串列表转换为数据帧