Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定列表中列的最长字符串长度的最快方法_Python_String_Dictionary - Fatal编程技术网

Python 确定列表中列的最长字符串长度的最快方法

Python 确定列表中列的最长字符串长度的最快方法,python,string,dictionary,Python,String,Dictionary,我有一个包含5000个键的字典,这些键的值是列表,我需要快速确定所有字典值中给定索引的最长字符串的长度 index = 1 d = {'foo': ['abc', 'defg'], 'bar': ['hij', 'klmno']} #m = len(max(d.values()[index],key=len))? 预期输出:5,因为索引1中的所有值('defg'和'klmno',后者最长)。非常接近,只需使用生成器表达式迭代列表中的所有项即可 print max(len(max(d[

我有一个包含5000个键的字典,这些键的值是列表,我需要快速确定所有字典值中给定索引的最长字符串的长度

index = 1
d = {'foo': ['abc', 'defg'],
     'bar': ['hij', 'klmno']}
#m = len(max(d.values()[index],key=len))?

预期输出:
5
,因为索引1中的所有值(
'defg'
和'klmno',后者最长)。

非常接近,只需使用生成器表达式迭代列表中的所有项即可

print max(len(max(d[i],key=len)) for i in d)

非常接近,只需要使用生成器表达式来迭代列表中的所有项

print max(len(max(d[i],key=len)) for i in d)

您需要使用生成器表达式来提取正确的索引:

longest_string = len(max((row[index] for row in d.values()), key=len))
如果您只需要长度,而不是字符串本身,那么还可以在生成器表达式中获取长度:

highest_length = max(len(row[index]) for row in d.values())
演示:


但是,您无法避免必须迭代字典中的所有值。

您需要使用生成器表达式来提取正确的索引:

longest_string = len(max((row[index] for row in d.values()), key=len))
如果您只需要长度,而不是字符串本身,那么还可以在生成器表达式中获取长度:

highest_length = max(len(row[index]) for row in d.values())
演示:


但是,您无法避免必须迭代字典中的所有值。

首先,使用列表提取所有感兴趣的字符串:

xs = [v[index] for v in d.values()]
接下来,将max带到琴弦的镜头上:

print(max(map(len, xs)))

首先,使用列表提取所有感兴趣的字符串:

xs = [v[index] for v in d.values()]
接下来,将max带到琴弦的镜头上:

print(max(map(len, xs)))


注释代码(应该是
len(max(d[index],key=len))
有什么问题?如果您正在查找特定的键,那么字典中有多少键又有什么关系呢?Python dict查找时间是O(1)@DeepSpace注释掉的代码的问题是“d.values()[index]”无效(Py3)或没有达到预期效果(Py2)。@MathiasRav当然没有做到:)
len(max(d[index],key=len))
您是在询问该字符串的长度,还是字符串本身?还有,您的预期输出应该是
4
,而不是
5
。注释的代码(应该是
len(max(d[index],key=len))
有什么问题?如果您正在查找特定的键,那么字典中有多少键又有什么关系呢?Python dict查找时间是O(1)@DeepSpace注释掉的代码的问题是“d.values()[index]”无效(Py3)或没有达到预期效果(Py2)。@MathiasRav当然没有做到:)
len(max(d[index],key=len))
您是在询问该字符串的长度,还是字符串本身?还有,您的预期输出应该是
4
,而不是
5
。我没有否决您的答案,但这不是一个列表。这是一个发电机。@HugoSadok谢谢,那是一个精神错乱。谢谢更新。首先从每个列表中获取最大值,然后从这些结果中获取最大值。OP试图从给定列中获取最大值,由
索引
@MartijnPieters表示。哦,我没有否决你的答案,但这不是一个列表。这是一个发电机。@HugoSadok谢谢,那是一个精神错乱。谢谢更新。首先从每个列表中获取最大值,然后从这些结果中获取最大值。OP试图从给定列中获取最大值,该列由
index
@MartijnPieters表示。为什么首先创建一个完整的列表对象?请改用生成器表达式。另外,为什么不将
len()
调用放入值
xs
输出中,为什么还要添加
map()
?实际上,使用生成器表达式可能更快。创建一个列表允许OP在REPL处检查计算。剥猫皮的方法不止一种。如果速度或空间使用是一个问题,记得根据真实的输入(也就是说,根据OP的用例是真实的,我们不知道)。为什么要先创建一个完整的列表对象?请改用生成器表达式。另外,为什么不将
len()
调用放入值
xs
输出中,为什么还要添加
map()
?实际上,使用生成器表达式可能更快。创建一个列表允许OP在REPL处检查计算。剥猫皮的方法不止一种。如果速度或空间使用是一个问题,请记住根据真实的输入进行配置(即,根据OP的用例进行真实的配置,我们不知道)。