我有两张单子:
alist = [11,12,13,11,15]
blist = ['A', 'A', 'B', 'A', 'B']
我想制作一个字典,其中blist中的项是键,alist中的项是值,列表对应于两个列表中的索引:
结果应该是:
{'A': [11, 12, 11], 'B': [13, 15]}
我试过这个:
dictNames = {}
for i in xrange(len(alist)):
for letter in blist:
if letter not in dictNames:
dictNames[letter] = []
else:
dictNames[letter].append(alist[i])
结果是:
{'A': [11, 11, 12, 12, 12, 13, 13, 13, 11, 11, 11, 15, 15, 15], 'B': [11, 12, 12, 13, 13, 11, 11, 15, 15]}
为什么它不附加到字典中已经存在的字母上,而不是在字典中已经存在的字母上添加?你知道吗
这样可以保持秩序
首先,在两个列表上循环。对于列表中的每一项,它都会循环浏览blist。所以内部循环运行了25次。相反,您希望它运行5次,因此您只需要一个循环。你知道吗
第二,如果列表还不存在,您可以正确地初始化它,但是在这种情况下,不会将数字添加到列表中。即使是新列表,也应始终将数字添加到列表中。你知道吗
我修改了您的代码,将这两个因素考虑在内,效果更好:
输出:
为了方便起见,请使用
defaultdict
:这将创建:
defaultdict
是dict
的一个子类,因此它仍然可以像其他dict
一样工作。你知道吗如果没有
defaultdict
,则必须测试键是否已经存在于setdefault()
:导致:
这里真正的技巧是使用^{} 组合键和值列表,而不是使用双循环。你知道吗
相关问题 更多 >
编程相关推荐