我的文件有这样的行,其中每一行都有一个索引(a,b),然后是一个与它们相关的数字列表
a\t12|123|08340|4985
b\t3856|12|276
我想要的是获得此输出
12 a
123 a
8340 a
4985 a
3856 b
276 b
请注意,我只想输出一组唯一的基因,如果行中有多个相同的数字,则首先出现该值。
我这样做了:尝试将数字添加到字典中,字母为键,数字为值。最后,只输出数字的set()和相应的字母。
uniqueval = set()
d = defaultdict(list)
for line in file:
fields = line.strip().split(\t)
Idx = fields[0]
Values = fields[1].split("|")
for Val in Values:
uniqueval.add(Val)
d[Idx] += Val
for u in uniqueval:
print u,"\t", [key for key in d.keys() if u in d.values()]
脚本运行,但是当我查看字典时,Val是按字符分割的,如下:
{'a': ['1','2','1'....], 'b': ['3', '8',....]}
我不明白为什么值因为它在for循环中而被拆分,我认为它会将每个Val作为一个新值添加到dict中。你能帮我理解这个问题吗?
谢谢。
答案 0 :(得分:2)
您使用Val
d[Idx] += Val
这会将Val
中的每个字符添加为单独的元素。
改为使用append()
:
d[Idx].append(Val)