字典理解使用两个不同的键来源和值

时间:2018-03-15 23:10:23

标签: python dictionary key dictionary-comprehension

我正在尝试通过理解来创建字典,但我必须使用来自特定数字范围的键和来自预定义列表的值:

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的第三个月(以及完全编码)。

1 个答案:

答案 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)}

zipenumerate的结果适合直接传递给dict;不需要词典理解:

pssmDict = dict(enumerate(pssmList))
相关问题