我有一组相同行数和结构的文本文件。为简单起见,假设它们看起来像这样:
文件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]
我已经讨论了很长一段时间而感到困惑。也许这很明显,但我在这里错过了什么?
答案 0 :(得分:2)
试试这个:
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
创建一个新的列表实例。
同时查看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