【问题标题】:Keep a value the same in a dictionary in Python在 Python 中的字典中保持相同的值
【发布时间】:2012-11-26 18:17:59
【问题描述】:

有点 Python 新手,但是否可以执行以下操作?

>>>random_dict=dict(a=2)
>>>addOnlyOneValue(random_dict)
{'a': 3}
>>>addOnlyOneValue(random_dict)
{'a': 3}

我做了什么:

def addOnlyOneValue(random_dict):
    random_dict2=random_dict     #I thought random_dict and random_dict2 would be modified independently    
    for val in random_dict2.keys():
        random_dict2[val]+=1
    print (random_dict2)

但如果我这样做,我会得到以下信息:

>>>random_dict=dict(a=2)
>>>addOnlyOneValue(random_dict)
{'a': 3}
>>>addOnlyOneValue(random_dict)
{'a': 4}

是否可以在 addOnlyOneValue 函数中以某种方式将 random_dict 重置为其原始值(此处为 random_dict=dict(a=2))?

【问题讨论】:

    标签: python dictionary reset


    【解决方案1】:

    你要做的是copy()字典:

    random_dict2 = random_dict.copy()
    

    在您的示例中,您只是将random_dict2 引用为random_dict - 您想要创建一个具有相同值的新副本(请注意,这是一个浅拷贝,所以如果您的字典具有可变的项,新字典仍会指向这些项,这可能会导致看似奇怪的行为)。

    请注意,您可以使用dictionary comprehension 来执行此操作,而不是手动循环:

    def addOnlyOneValue(random_dict):
        print({key: value+1 for key, value in random_dict.items()})
    

    字典推导是通过修改现有数据结构中的值来创建新字典的最佳方式。

    【讨论】:

      【解决方案2】:

      将字典(或除字符串或数字之外的任何其他对象)分配给另一个变量的结果是对该对象的引用的分配,它不会创建副本。你可以这样做:

      random_dict2 = dict(random_dict)
      

      列表类似:

      my_copy = list(some_list)
      

      请注意,此副本是“浅”的,这意味着仅复制列表并将包含对所包含对象的引用,而不是对象的副本。阅读有关copying in python 的更多信息。

      【讨论】:

        猜你喜欢
        • 2020-11-01
        • 1970-01-01
        • 2013-11-08
        • 1970-01-01
        • 2013-02-26
        • 2023-03-26
        • 2014-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多