Python 字典:如何获取最长键值的最长值?
Python Dictionary: How to get the longest key for the longest value?
dic = {'a':4, 'b':5, 'cd':5 }
我正在寻找:
- 最高值(先搜索最高值=>
b
, cd
)
- longest key(然后搜索最长的key =>
'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)]
然后 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)
dic = {'a':4, 'b':5, 'cd':5 }
我正在寻找:
- 最高值(先搜索最高值=>
b
,cd
) - longest key(然后搜索最长的key =>
'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)]
然后 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)