我有一个包含5000个键的字典,其值是列表,我需要快速确定所有字典值中给定索引的最长字符串的长度
index = 1
d = {'foo': ['abc', 'defg'],
'bar': ['hij', 'klmno']}
#m = len(max(d.values()[index],key=len))?
预期输出:5
,因为索引1处的所有值('defg'
和'klmno'`,后者是最长的。)
答案 0 :(得分:5)
您需要使用生成器表达式来提取正确的索引:
longest_string = len(max((row[index] for row in d.values()), key=len))
如果您需要的只是长度,而不是字符串本身,您也可以在生成器表达式中获取长度:
highest_length = max(len(row[index]) for row in d.values())
演示:
>>> index = 1
>>> d = {'foo': ['abc', 'defg'],
... 'bar': ['hij', 'klmno']}
>>> max((row[index] for row in d.values()), key=len)
'klmno'
>>> max(len(row[index]) for row in d.values())
5
然而,您无法逃避必须遍历字典中的所有值。
答案 1 :(得分:1)
首先,使用列表解析提取所有感兴趣的字符串:
xs = [v[index] for v in d.values()]
接下来,拍摄琴弦镜头的最大值:
print(max(map(len, xs)))
答案 2 :(得分:-1)
你非常接近,你只需要使用生成器表达式迭代列表中的所有项目。
print max(len(max(d[i],key=len)) for i in d)