Python印花行.附加()循环if/els

2024-10-03 21:24:10 发布

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

这是我的问题,我有两个文件,我想在那里阅读和打印行.附加():

文件1:

ID1 desc1
ID2 desc2
ID3 desc3
ID4 desc4

文件2:

^{pr2}$

我想要的是:

ID1 random1  desc1
ID5 random5  desc5
ID6 randomI  nothing

但是,我当前的代码:

address = {}

with open('address.txt', 'r') as f:
    rows = (line.rstrip().split('\t') for line in f)
    address = { row[0]:row[1:] for row in rows }

    for key, value in address.items():

        with open('families.txt', 'r') as f:    
            for line in f.readlines():
                line = line.rstrip('\n')
                line = line.split('\t')
                if line[0] == key: 
                    line.append(str(address[key]))
                    print ('\t'.join(line))
                else:
                    line.append('nothing')
                    print ('\t'.join(line))

但是,我得到了一个循环

ID1 random1  desc1
ID5 random5  nothing
ID6 randomI  nothing
ID1 random1  nothing
ID5 random5  desc5
ID6 random6  nothing

另外,如果有人能建议最好的方法来丢弃作为我字典末尾“值”一部分的方括号。在


Tags: 文件keyinforaddresslinerownothing
3条回答

试着这样做:

with open('address.txt') as fh1:
    data1 = {j[0]: j[1] for j in [i.strip().split('\t') for i in fh1.readlines()]}

with open('families.txt') as fh2:
    data2 = {j[0]: j[1] for j in [i.strip().split('\t') for i in fh2.readlines()]}

result = {k: [v, data1[k]] if k in data1 else [v, 'nothing'] for k, v in data2.items()}

我认为你最好把每个文件都读入词典。不要在“for”循环中重新读取第二个文件。在

然后,创建第三个字典。在

重复dict1:

for key, value in dict1.iteritems(): #python 2.7

或者

^{pr2}$

然后,您可以创建第三个字典,它将使用相同的键,但值将是一个元组。对于迭代中的每个键,如果键存在于dict1中,那么元组的第一部分就是值。如果它不存在,元组的第一部分就是“无”。然后对第二个dict执行相同的操作,对于第二个值。在

然后迭代dict2,并执行相同的操作;只需检查每个键;如果它已经在新dict中,则不要处理它-它已经被处理了,只需继续。在

 if key in new_dict:
     continue

一旦你有了这个新的dict,你可以用任何你想要的方式来格式化它。This post提供了很多格式化选项。在

我删除了一些不必要的东西,希望能清理掉一些东西。。。在

我删除了对'\n''\t'的引用,因为.rstrip()和{}方法在默认情况下会自动处理这些字符。在

with open('address.txt', 'r') as f:
    rows = [line.rstrip().split() for line in f]

我利用for语句中的元素unpacking将每行的第一个和第二个项解压为x和{}值,以便插入字典。在

^{pr2}$

在本例中,不需要遍历families文件中的行和地址字典中的项。字典是为查找关键字而优化的,因此我们只需循环查看族文件并在字典中查找。在

        if line[0] in address:
            line.append(str(address[line[0]]))
            print('\t'.join(line))
        else:
            line.append('nothing')
            print('\t'.join(line))

相关问题 更多 >