【问题标题】:Updating a Dictionary with a Random Nested Dictionary使用随机嵌套字典更新字典
【发布时间】:2019-07-29 17:29:20
【问题描述】:

我需要用随机键更新字典(键是嵌套字典),但是当我这样做时,它会给我一个错误。

我尝试使用 .update,并使用了 random.choice(dict),但这只会报错

dictA = { 1 : 2, 2 : 3, 3 : 4}
dictB = {}
dictB.update(random.choice(list(dictA)))

我希望 dictB 有一个随机键,但是,我得到的是 ValueError: dictionary update sequence element #0 has length 1; 2 是必需的。

【问题讨论】:

    标签: python dictionary random


    【解决方案1】:

    您可以对dict.items() 进行随机选择,它会从字典中返回一个随机键值对:

    k, v = random.choice(list(dictA.items()))
    dictB.update({k: v})
    

    【讨论】:

    • 这个答案更pythonic
    【解决方案2】:

    将其分解以进行适当的调试:

    随机导入

    dictA = { 1 : 2, 2 : 3, 3 : 4}
    dictB = {}
    listA = list(dictA)
    pick = random.choice(listA)
    print(listA, pick)
    dictB.update(pick)
    

    print 的输出是:

    [1, 2, 3] 3

    因此,您使用3 的参数调用update,这是不合法的。我认为你想要做的是抓取整个条目,但你没有这样做:相反,你列出了 dict 键并从中随机选择。 p>

    最后试试这个:构造一个你选择的键和它的值的单元素字典。

    dictB.update({pick : dictA[pick]})
    print(dictB)
    

    输出:

    [1, 2, 3] 2
    {2: 3}
    

    【讨论】:

    • 我得到一个错误:TypeError: 'int' object is not iterable
    【解决方案3】:

    这就是你要找的东西

    temp=random.choice(list(dictA))
    dictB.update({temp:dictA[temp]})
    

    【讨论】:

      【解决方案4】:

      我实际上不确定你想做什么,但假设你想用随机的item(键,dictA 的值)更新dictB

      item = random.choice(list(dictA.items()))
      # item is a tuple (key, value)
      dictB[item[0]] = item[1]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-25
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 2021-07-24
        • 2015-10-22
        • 2021-12-20
        • 1970-01-01
        相关资源
        最近更新 更多