我当时正在努力解决另一个问题,但是遇到了不确定如何计算长度的步骤。
样本数据:
file_content = [
'"Track","Artist","Album","Time"',
'"Computer Love","Kraftwerk","Computer World","7:15"',
'"Paranoid Android","Radiohead","OK Computer","6:27"'
]
目标:
计算具有最大字符长度的任何行,然后返回该值。基本上,从集合中找到dict.values()
的字符总和和 that 的最大值。
我尝试使用嵌套的理解,但是我陷入了困境。到目前为止,这是我尝试过的:
import csv
rows = [r for r in csv.DictReader(file_content)]
max([sum(len(v)) for row in rows for v in row.values()])
答案 0 :(得分:1)
由于csv包含表格结构,因此我们也可以使用熊猫。
import pandas as pd
可以使用df = pd.read_csv(path)
加载文件,该文件将返回以下DataFrame:
Track Artist Album Time
Computer Love Kraftwerk Computer World 7:15
Paranoid Android Radiohead OK Computer 6:27
然后我们可以将行连接起来并取合并字符串长度的最大值
df["Concat"] = [''.join(row.astype(str)) for row in df.values]
Track Artist Album Time Concat
Computer Love Kraftwerk Computer World 7:15 Computer LoveKraftwerkComputer World7:15
Paranoid Android Radiohead OK Computer 6:27 Paranoid AndroidRadioheadOK Computer6:27
df["Concat"].str.len().max()
#40
答案 1 :(得分:0)
类似以下的方法应该起作用:
max([len(i) for i in file_content])
答案 2 :(得分:0)
您创建了一个字典列表,您想找到每个列表项值的总长度,并确定最大长度:
以下是使用列表理解和str.join
的解决方案:
lengths = [
len(''.join(row.values())) for row in rows
]
max(lengths)
40
您当前的尝试实际上已经非常接近,您只是错误地划分了表达式。这是一个工作版本:
[
sum(len(i) for i in row.values())
for row in rows
]
答案 3 :(得分:0)
如果需要该行,可以将自定义键传递给max:
import csv
file_content = [
'"Track","Artist","Album","Time"',
'"Computer Love","Kraftwerk","Computer World","7:15"',
'"Paranoid Android","Radiohead","OK Computer","6:27"'
]
rows = [r for r in csv.DictReader(file_content)]
result = max(rows, key=lambda r: sum(map(len, r.values())))
print(result)
输出
{'Track': 'Computer Love', 'Album': 'Computer World', 'Time': '7:15', 'Artist': 'Kraftwerk'}