我正在尝试通过理解来创建字典,但我必须使用来自特定数字范围的键和来自预定义列表的值:
pssmList=[]
for column in columns:
pssmList.append(collections.Counter(column))
pssmDict = {key:value for key in range(0, len(pssmList)) for value in
pssmList}
现在,我知道Counter对象是一种类型的dict,但是我需要将pssmDict中的那些对象分配给上面指定的数值范围内的键,并且我得到的是pssmList中反复重复的最后一个元素,尽管每一行应该是不同的(是的,我检查了列表,它确实包含不同的记录):
Key Number
0 Counter({'T': 8, 'E': 4, 'P': 2, 'V': 1, 'S': 1, 'D': 1})
1 Counter({'T': 8, 'E': 4, 'P': 2, 'V': 1, 'S': 1, 'D': 1})
2 Counter({'T': 8, 'E': 4, 'P': 2, 'V': 1, 'S': 1, 'D': 1})
3 Counter({'T': 8, 'E': 4, 'P': 2, 'V': 1, 'S': 1, 'D': 1})
4 Counter({'T': 8, 'E': 4, 'P': 2, 'V': 1, 'S': 1, 'D': 1})
5 Counter({'T': 8, 'E': 4, 'P': 2, 'V': 1, 'S': 1, 'D': 1})
期望的输出:
Key Number
0 Counter({'V': 14, 'L': 2, 'A': 1})
1 Counter({'D': 17})
2 Counter({'F': 17})
3 Counter({'S': 8, 'W': 5, 'Y': 3, 'T': 1})
4 Counter({'A': 17})
5 Counter({'T': 8, 'E': 4, 'P': 2, 'V': 1, 'S': 1, 'D': 1})
有谁知道为什么这不起作用?我已经搜索了StackOverflow类似的问题,但要么我在搜索方面不好,要么没有出现这样的问题。
请原谅我,如果我的错误是微不足道的,我在学习Python的第三个月(以及完全编码)。
答案 0 :(得分:3)
将两个来源拼凑在一起:
pssmDict = {key: value for key, value in zip(range(0, len(pssmList)), pssmList)}
但是,在这种情况下,您只需使用enumerate
生成密钥。
pssmDict = {key: value for key, value in enumerate(pssmList)}
zip
和enumerate
的结果适合直接传递给dict
;不需要词典理解:
pssmDict = dict(enumerate(pssmList))