字典在for循环的每次迭代中都会被覆盖

时间:2016-04-06 06:08:54

标签: python python-3.x for-loop dictionary

import random

o=['§','±','!','@','#','$','%','^','&','*','(',')','','_','=','+','/','[']
q=['1','2','3','4','5','6','7','8','9','0']

for i in top_25:
    wordDic ={i: random.choice(o)+random.choice(q)}
print(wordDic)

(top_25是一个单词数组,random.choice随机选择各个数组中的字符)。当for循环迭代时,wordDic不断更新并覆盖自身 - 有没有办法将wordDic的新值添加到字典中,所以它会在一个字典中打印出所有这些值?

2 个答案:

答案 0 :(得分:3)

因为你在循环中定义字典。

这意味着你在循环的每次迭代中重新加工/覆盖字典(评论来自:@ M.T)

在循环外定义它以使其工作。

word_dic = {}
for i in top_25:
    word_dic[i] = random.choice(o)+random.choice(q)
print(word_dic)

答案 1 :(得分:1)

执行此操作的紧凑方法是使用dictionary comprehension。此外,无需传递random.choice单个字符列表:您只需传递一个字符串即可。

from random import choice

o = u"§±!@#$%^&*()_=+/["
q = u"0123456789"

wordDic = {word: choice(o)+choice(q) for word in top_25}
print(wordDic)

我在字符串上使用了u前缀,使代码与Python 2以及Python 3兼容。

相关问题