将项添加到列表的字典中

时间:2014-10-06 21:27:23

标签: python dictionary defaultdict

我的文件有这样的行,其中每一行都有一个索引(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中。你能帮我理解这个问题吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

您使用Val

扩展您的列表
d[Idx] += Val

这会将Val中的每个字符添加为单独的元素。

改为使用append()

d[Idx].append(Val)