迭代两个列表,比较第一列并附加第二列

2024-04-20 02:14:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两份不同的记录。一个只有一列有名称,第二个有两列,一列有相同的名称列表,另一列有id。第一条记录中的名称是唯一的,但第二条记录中的名称是重复的;id是唯一的。我想使用Name列将一个列表与另一个列表进行匹配,并在名称相同时将id附加到同一行。你知道吗

文件1

Name1
Name2
Name3
Name4
Name5

文件2

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])

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

ID008

Tags: 文件名称id列表记录f2name1name2
3条回答

对于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来实现等式。你知道吗

您可以将内容存储在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']}

首先,在循环中打开文件的原因是什么。先打开它。其次,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

相关问题 更多 >