Python TypeError:序列项0:应为字符串,找到列表

Python TypeError:序列项0:应为字符串,找到列表,python,Python,我在下面的代码中遇到以下错误..有人能提供关于如何修复它的输入吗 from collections import OrderedDict def main (): with open('gerrit_dependencylist.txt') as f: dic = OrderedDict() seen = set() for line in f: #print dic,line spl =

我在下面的代码中遇到以下错误..有人能提供关于如何修复它的输入吗

from collections import OrderedDict
def main ():

    with open('gerrit_dependencylist.txt') as f:
        dic = OrderedDict()
        seen = set()
        for line in f:
            #print dic,line
            spl = line.split()
            #print "SPL"
            #print spl
            if len(spl) == 1:
                key = spl[0]
                v = ''
            else:
                print "LINE"
                print line
                key, v = spl[0], spl[1:]        
            for value in v:
                if value in dic and dic[value] == [""]:
                    del dic[value]
            for k1,v1 in dic.iteritems():
                if key in v1:
                    dic[k1].append(v)
                    break
            else:
                dic[key] = [v]

    with open('cherrypick_list.txt', 'w') as f:
        for k,v  in dic.items():
            f.write("{} {}\n".format(k," ".join(v)))

if __name__ == '__main__':
    main()
输入:-

KEY    VALUES
353311
344670 
332807 353314
338169 334478
334478 123456 34567
123456 98670
34567  11111  
353314 353311
348521 350166 350168 350169 350170 
350166 348521
350168 348521
350169 348521
350170 348521

CURRENT OUTPUT:-

344670 
332807 3 5 3 3 1 4 3 5 3 3 1 1
338169 3 3 4 4 7 8 1 2 3 4 5 6 3 4 5 6 7 9 8 6 7 0 1 1 1 1 1
348521 3 5 0 1 6 6 3 5 0 1 6 8 3 5 0 1 6 9 3 5 0 1 7 0 3 4 8 5 2 1 3 4 8 5 2 1 3 4 8 5 2 1 3 4 8 5 2 1
EXPECTED OUTPUT
344670
332807 353314 353311
338169 334478 123456 34567 98670 11111
348521 350166 350168 350169 350170
错误:-

Traceback (most recent call last):
  File "tesst.py", line 34, in <module>
    main()
  File "tesst.py", line 31, in main
    f.write("{} {}\n".format(k," ".join(v)))
TypeError: sequence item 0: expected string, list found
回溯(最近一次呼叫最后一次):
文件“tesst.py”,第34行,在
main()
文件“tesst.py”,第31行,在main中
f、 写入(“{}{}\n”.format(k,”.join(v)))
TypeError:序列项0:应为字符串,找到列表
除了一种情况(
344670['']
)之外,
v
的值始终是列表列表,因此您需要使用嵌套列表理解来首先展平列表

with open('cherrypick_list.txt', 'w') as f:
    for k,v  in dic.items():
        val = [item if isinstance(item, str) else " ".join(item) for item in v ]
        f.write("{} {}\n".format(k,val))
获取唯一项目:

val = [item if isinstance(item, str) else " ".join(item) for item in v ]
seen = set()
val = [x for x in val if x not in seen and not seen.add(x)]
除了一种情况(
344670['']
)外,
v
的值始终是列表列表,因此您需要使用嵌套列表理解来首先展平列表

with open('cherrypick_list.txt', 'w') as f:
    for k,v  in dic.items():
        val = [item if isinstance(item, str) else " ".join(item) for item in v ]
        f.write("{} {}\n".format(k,val))
获取唯一项目:

val = [item if isinstance(item, str) else " ".join(item) for item in v ]
seen = set()
val = [x for x in val if x not in seen and not seen.add(x)]

这意味着
v
是一个列表列表;它应该是一个字符串列表。它意味着
v
是一个列表列表;它应该是一个字符串列表。问题是数据是混合的。有时
v
是字符串列表,有时它包含其他带有字符串的列表。在其他情况下,您将生成以空格分隔的单个字符的输出。@MartijnPieters,除了一种情况(
344670['']
),它始终是一个列表列表。对于此示例,它可能是。@AshwiniChaudhary-我合并了您的更改。.输出看起来正确,只是每个数字之间都有一个空格用于值。我用当前输出更新了问题。@user2125827我再次检查了代码,它似乎在我的系统上工作正常。问题是数据是错误的混合的。有时
v
是字符串列表,有时它包含其他带有字符串的列表。在其他情况下,您将生成以空格分隔的单个字符的输出。@MartijnPieters,除了一种情况(
344670['']
),它始终是一个列表列表。对于此示例,它可能是。@AshwiniChaudhary-我合并了您的更改。.输出看起来正确,只是每个数字之间都有一个空格作为值。我用当前输出更新了问题。@user2125827我再次检查了代码,它似乎在我的系统上工作正常。