迭代两个列表,比较第一列和追加第二列

时间:2015-11-19 18:15:23

标签: python python-3.x

我有两个单独的记录。一个只有一个列有名称,第二个列有两列,一列有相同的名称列表,另一列有ID。第一个记录中的名称是唯一的,但在第二个记录中它们是重复的; ID是唯一的。我想使用Name列将一个列表与另一个列表匹配,并在名称相同时将ID附加到同一行。

FILE1

mystring = 'abccd'
m = re.match(r'.*(\w)\1', mystring)  
print m.group(1)  # 'c'

FILE2

Name1
Name2
Name3
Name4
Name5

输出

Name1 ID001
Name1 ID002
Name2 ID003
Name3 ID004
Name4 ID005
Name4 ID006
Name4 ID007
Name5 ID008

这是我到目前为止所做的:

Name1 ID001 ID002
Name2 ID003
Name3 ID004
Name4 ID005 ID006 ID007
Name5 ID008

但输出只是最后一条记录:

f1 = open('Test1.txt')
for line1 in f1:
    f2 = open('Test2.txt')
    for line2 in f2:
        line3 = f2.split(' ')
        if line1 == line3[0]:
            print(line3[1])

3 个答案:

答案 0 :(得分:0)

您可以将内容存储在dict中,然后遍历dict并在构建后打印内容。在这种情况下,读取文件内容的方式假设文本文件中每行之间没有空行:

names = dict()

with open('Test1.txt') as f1:
for line in f1:
   names[line.strip("\n")] = list()

with open('Test2.txt') as f2:
    for line in f2:
        name, id = line.strip("\n").split(' ')
        names[name].append(id)

print names

结果将是:

{'Name4': ['ID005', 'ID006', 'ID007'], 'Name5': ['ID008'], 'Name2': ['ID003'], 'Name3': ['ID004'], 'Name1': ['ID001', 'ID002']}

答案 1 :(得分:0)

对于此输入为Test1.txt:

Name1
Name2
Name3
Name4
Name5

此输入为Test2.txt:

Name1 ID001
Name1 ID002
Name2 ID003
Name3 ID004
Name4 ID005
Name4 ID006
Name4 ID007
Name5 ID008

此代码:

f1 = open('Test1.txt')
for line1 in f1:
    line1 = line1.strip()
    print(line1, end=" ")
    f2 = open('Test2.txt')
    for line2 in f2:
        line2 = line2.strip()
        line3 = line2.split(' ')
        if line1 == line3[0]:
            print(line3[1], end=" ")
    print()

生成此输出:

Name1 ID001 ID002 
Name2 ID003 
Name3 ID004 
Name4 ID005 ID006 ID007 
Name5 ID008 

请注意使用strip来使等式生效。

答案 2 :(得分:-1)

首先,在循环中打开文件的原因是什么。之前打开它。其次,print语句与预期输出不匹配。此外,您在文件而不是行上应用拆分。以下是如何解决它的建议:

# test file1
f1 = ["Name1","Name2","Name3","Name4","Name5"]

# test file2
f2= ["Name1 ID001","Name1 ID002","Name2 ID003",
     "Name3 ID004","Name4 ID005","Name4 ID006",
     "Name4 ID007","Name5 ID008"]
output = {}
for line1 in f1:
    output[line1] = []
    for line2 in f2:
        line3 = line2.split(' ')
        if line1 == line3[0]:
            output[line1].append(line3[1])
"""
expected output: {'Name1': ['ID001', 'ID002'], 'Name2': ['ID003'], 'Name3': ['ID004'], 'Name4': ['ID005', 'ID006', 'ID007'], 'Name5': ['ID008']}
"""
print output