【发布时间】:2014-09-30 19:22:04
【问题描述】:
我有一个数据文件,例如:
1 123 something else
2 234 something else
3 500 something else
.
.
.
1 891 something else
2 234 something else
3 567 something else
.
.
.
我试图最终得到一个文件:
1 1014
2 468
3 1067
也就是说,如果第 1 列中的数字相同,则添加第 2 列(或其他列)中的数字。我相信将列读入嵌套列表并从那里开始是可行的,但我一直在努力解决这个问题。我尝试的另一种方法是使用我感兴趣的条目创建一个新文件:
for next in f.readlines():
output.write(next[0:1] + "," + next[3:6]+ "\n")
if not next:
break
with open(output,"r") as file:
data_list=[[int(x) for x in line.split(",")] for line in file]
print data_list
返回
[[1, 123], [2, 234], [3, 500], [1, 891], [2, 234], [3, 567]]
我想我可以遍历该列表并比较 data_list[x][0] 并添加匹配的值,但这似乎不是一个优雅的解决方案。 谁能提出一种更优雅的方式来做到这一点? 特别是,我一直在努力对最终得到的嵌套列表中的特定项目求和。
【问题讨论】:
-
使用列表中的dictionary:
{1: [123, 891, ...], ...}。 -
您的代码示例没有意义。什么是输出?为什么不直接使用文件对象 f 工作?并且...我不会那么明确地采用 next[3:6],但也许用 .split('\t') 分割行并采用 [1] 元素
-
感谢 cmets 并对造成的混乱表示歉意。我省略了一些代码以使其更具可读性,我猜它会产生相反的效果。无论如何,明确采用 next[3:6] 的原因是由于数据文件的设置方式,这是我无法控制的。