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


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

我正在努力寻找:

  • 最高值(首先搜索最高值=>bcd)
  • 最长关键字(然后搜索最长关键字=>'cd')

我使用以下代码:

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)]

maxDicKeyitems[0][0],即cd

有了很大的改进


我们真的应该尝试一次完成所有事情。缺点是有更多的代码。下面将dic中的第一个密钥存储在cur中,然后从第二个密钥开始迭代dic,如果我们找到一个大于与密钥cur相关联的值的值,或者如果我们找到了一个值等于与密钥cur相关联的数值并且密钥的长度大于cur的长度的密钥、值对,则更新cur

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)

CCD_ 14是在CCD_ 15中产生密钥的生成器,使得其值等于最大值。CCD_ 16然后在这些密钥中选择最大的字符串。

上面的比这一行快,因为上面的缓存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)

相关内容

  • 没有找到相关文章