【发布时间】:2014-09-10 06:59:39
【问题描述】:
问题介绍
我有以下文件(文件按所有三列排序):
D000001 D000001 1975
D000001 D000001 1976
D000001 D002413 1976
D000001 D002413 1979
D000001 D002413 1987
D000001 D004298 1976
D000002 D000002 1985
D000003 D000900 1975
D000003 D000900 1990
D000003 D004134 1983
D000003 D004134 1986
我需要计算重复的对(在第 1 列和第 2 列中),并为每个这样的对分配第 3 列中的最小值。对于我的玩具文件,输出应该是:
D000001 D000001 2 1975
D000001 D002413 3 1976
D000001 D004298 1 1976
D000002 D000002 1 1985
D000003 D000900 2 1975
D000003 D004134 2 1983
我的问题
- 文件很大(1 GB 到 5 GB),我想知道在这种设置中实现最合适的编程结构是什么?
- 如何正确打印最后(第三)列?在当前设置中(检查下面的代码),程序会打印最后一个(最高)值。
我对当前输出的初步尝试如下。
my_dict = {}
with open('test.srt') as infile:
for line in infile:
line = line.rstrip()
word1, word2, year = line.split('|')
year = int(year)
my_tuple = (word1, word2)
if my_tuple in my_dict:
freq += 1
my_dict[my_tuple] = (freq, year)
else:
freq = 1
my_dict[my_tuple] = (freq, year)
for key, value in my_dict.items():
print key[0], key[1], value
当前输出:
D000001 D000001 (2, 1976) ## Should be 1976 etc.
D000001 D002413 (3, 1987)
D000001 D004298 (1, 1976)
D000002 D000002 (1, 1985)
D000003 D000900 (2, 1990)
D000003 D004134 (2, 1986)
【问题讨论】:
-
为什么文件很大和排序?准备这样的东西似乎浪费了时间,尽管它确实大大简化了现阶段的处理,因为重复对是连续的。
标签: python algorithm optimization duplicates text-processing