python - 将项目添加到列表的字典中

标签 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 作为一个新值添加到字典中。你能帮我理解这个问题吗?

谢谢。

最佳答案

您正在使用Val扩展您的列表:

d[Idx] += Val

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

使用append()代替:

d[Idx].append(Val)

关于python - 将项目添加到列表的字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26225134/

相关文章:

python - python RSA中相同 key 的不同解密输出

python - 双重嵌套defaultdict

python - 使用python仅计算文本文件中的每个单词一次

Python 字典到 DataFrame Pandas - 级别

python从低级类访问高级变量

python - 如何在 pygame.draw.lines 中为每一行使用不同的颜色

python - 使用 Dict 创建索引的更快代码

python - 嵌套字典 for 循环

pandas - 将 DataFrame 列映射到 2 个不同的字典