【发布时间】:2015-04-28 14:38:20
【问题描述】:
我正在解析两个大文件(Gb 大小顺序),每个文件都包含keys 和对应的values。一些keys 在两个文件之间共享,但对应的values 不同。
对于每个文件,我想将keys* 和相应的values 写入一个新文件,其中keys* 表示file1 和file2 中都存在的键。我不在乎输出中的key 顺序,但两个文件中的顺序绝对应该相同。
文件 1:
key1
value1-1
key2
value1-2
key3
value1-3
文件2:
key1
value2-1
key5
value2-5
key2
value2-2
一个有效的输出是:
解析文件 1:
key1
value1-1
key2
value1-2
解析文件 2:
key1
value2-1
key2
value2-2
另一个有效的输出:
解析文件 1:
key2
value1-2
key1
value1-1
解析文件 2:
key2
value2-2
key1
value2-1
无效输出(文件 1 和文件 2 中的键顺序不同):
解析文件 1:
key2
value1-2
key1
value1-1
解析文件 2:
key1
value2-1
key2
value2-2
最后一个精度是值大小远远大于键大小。
我想做的是:
对于每个输入文件,解析并返回一个
dict(我们称之为file_index),其中的键对应于文件中的键,值对应于在输入中找到该键的偏移量文件。-
计算交点
good_keys = file1_index.viewkeys() & file2_index.viewkeys() -
做类似(伪代码):
for each file: for good_key in good_keys: offset = file_index[good_key] go to offset in input_file get corresponding value write (key, value) to output file
迭代同一个集合是否保证我有完全相同的顺序(假设它是相同的集合:我不会在两次迭代之间修改它),或者我应该转换先设置一个列表,然后遍历列表?
【问题讨论】:
-
您实际上是在使用字典还是集合?一旦你不改变集合,顺序就不会改变
-
对于一个简单的问题,有很多文字!将问题放在开头,并删除其他不能改善问题的内容。
标签: python python-2.7 set iteration