我有两个文本文件格式如下:
第一个是每一行:
Key1:Value1
第二个是:
Key2:Value2
有没有一种方法,我可以代替Value1在file1由Value2获得使用它作为一个重点file2?
例如:
文件1:
foo:hello
bar:world
文件2:
hello:adam
bar:eve
我想得到:
foo:adam
bar:eve
每行上的两个文件之间不一定匹配.这可以用awk或者其他东西整齐地完成,或者我应该在Python中天真地做到这一点?
创建两个字典,每个文件一个。例如:
file1 = {}
for line in open('file1', 'r'):
    k, v = line.strip().split(':')
    file1[k] = v
或者,如果您更喜欢单行:
file1 = dict(l.strip().split(':') for l in open('file1', 'r'))
然后你可以做类似的事情:
result = {}
for key, value in file1.iteritems():
    if value in file2:
        result[key] = file2[value]
另一种方法是您可以为 file1 反向生成键值对并使用集合。例如,如果您的 file1 包含foo:bar,则您的 file1 字典为{bar: foo}。
for key in set(file1) & set(file2):
    result[file1[key]] = file2[key]
基本上,您可以使用集合交集快速找到公共元素,因此这些元素保证位于 file2 中,并且您不会浪费时间检查它们是否存在。
编辑:正如@pepr 所指出的,collections.OrderedDict如果顺序对您很重要,您可以使用第一种方法。