我有一组相同行数和结构的文本文件。为了简单起见,假设它们看起来像这样:
档案1:
2
3
34
56
档案2:
3
43
2
1
档案3:
9
88
3
11
对于每个行号(本例中为4行),我希望创建一个字典,其键为数字,其值为列表,其中包含满足特定条件的文件中相应的行。
例如,如果条件是线上的数字应该大于10,则结果是:
1: []
2: [43, 88]
3: [34]
4: [56, 11]
我试过像这样编写代码:
meta_list = dict.fromkeys(range(0, num_lines), [])
for file in files:
with open(file, 'rb') as f:
line_num = 1
for line in f:
if condition_met(line):
meta_list[line_num].append(float(line))
line_num = line_num + 1
但我的逻辑一定是错的!在我的示例数据上,结果是一堆相同的数据!:
1: [34, 56, 43, 88, 11]
2: [34, 56, 43, 88, 11]
3: [34, 56, 43, 88, 11]
4: [34, 56, 43, 88, 11]
我已经讨论了很长一段时间了,感到很困惑。也许这很明显,但我在这里错过了什么?
发布于 2014-08-06 19:52:45
试试这个:
meta_list = dict((i, []) for i in range(0, num_lines))
for file in files:
with open(file, 'rb') as f:
line_num = 1
for line in f:
if condition_met(line):
meta_list[line_num].append(float(line))
line_num = line_num + 1
这将为meta_list
创建一个新的list实例。
还可以查看collections.defaultdict
,使用它,您的代码将变成:
from collections import defaultdict
meta_list = defaultdict(list)
for file in files:
with open(file, 'rb') as f:
line_num = 1
for line in f:
if condition_met(line):
meta_list[line_num].append(float(line))
line_num = line_num + 1
https://stackoverflow.com/questions/25168903
复制相似问题