Python 字典:如何获取最长键值的最长值?

Python Dictionary: How to get the longest key for the longest value?

dic = {'a':4, 'b':5, 'cd':5 }

我正在寻找:

我使用以下代码:

max_val = dic[max(dic, key=dic.get)]
maxDicVal = dict(filter(lambda x: x[1] == max_val, dic.items()))
maxDicKey = max(maxDicVal, key=len)

有没有更好的方法来实现这个?

谢谢。

然后您可以根据值降序和键降序的长度对字典项目进行排序。例如:

items = sorted(dic.items(), key=lambda v:(v[1], len(v[0])), reverse=True)

输出:

[('cd', 5), ('b', 5), ('a', 4)]

然后 maxDicKey 就是 items[0][0]cd

进步很大


我们真的应该尝试一次完成所有事情。缺点是代码比较多。下面将 dic 中的第一个键存储在 cur 中,然后遍历 dic,从第二个键开始,如果我们找到一个大于 cur 的值,则更新 cur与键 cur 关联的值,或者如果我们找到一个键,值对,其值等于与键 cur 关联的值,并且键的长度大于 [=15= 的长度].

it = iter(dic)
cur = next(it)        # the first key
for key in it:        # iterate thr keys of dic, starting from second
    if dic[key] > dic[cur] or (dic[key] == dic[cur] and len(key) > len(cur)):
        cur = key

print(cur)

较小的改进


max_value = max(dic.values())
a = max((k for k in dic if dic[k] == max_value), key = len)

(k for k in dic if dic[k] == max_value) 是一个生成器,它生成 dic 中的键,使其值等于最大值。 max(..., key = len) 然后从这些键中选择最大的字符串。

上面的比这个快 one-liner 因为上面的缓存 max(dic.values()):

a = max((k for k in dic if dic[k] == max(dic.values())), key = len)

计时


# EBDS 
1.19 µs ± 3.26 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)

# oda (a smaller improvement)
759 ns ± 4.12 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)

# oda (a big improvement)
304 ns ± 0.953 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)

# Nick
648 ns ± 1.36 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)