【问题标题】:Dictionary keeps getting overwritten in each iteration of for-loop字典在 for 循环的每次迭代中不断被覆盖
【发布时间】:2016-04-06 06:08:54
【问题描述】:
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 的新值添加到字典中,从而将它们全部打印在一个字典中?

【问题讨论】:

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


    【解决方案1】:

    因为您是在循环内定义字典。

    这意味着您在循环的每次迭代期间都在重新定义/覆盖字典(评论来自:@M.T)

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

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

    【讨论】:

    • 值得一提以澄清:OP 正在重新为循环中的每次迭代定义/覆盖字典。
    • @M.T:更新了答案
    【解决方案2】:

    执行此操作的简洁方法是使用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 兼容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 2019-02-13
      相关资源
      最近更新 更多