ファイルごとに1つずつ、合計2つの辞書を作成します。例えば:
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]
もう1つの方法は、file1とuseセットのキーと値のペアを逆に生成することです。たとえば、file1にが含まれている場合、foo:bar
file1dictはです{bar: foo}
。
for key in set(file1) & set(file2):
result[file1[key]] = file2[key]
基本的に、setintersectionを使用して共通の要素をすばやく見つけることができるため、それらの要素はfile2にあることが保証され、それらの存在を確認する時間を無駄にすることはありません。
編集: @peprが指摘したようcollections.OrderedDict
に、順序が重要な場合は、最初の方法に使用できます。