簡體   English   中英

Python - 如何將字典作為值傳遞給defaultdict而不是作為引用

[英]Python - how to pass a dictionary into defaultdict as value and not as a reference

所以說我有一個字典,其默認值是另一個字典

attributes = { 'first_name': None, 'last_name': None, 'calls': 0 }
accounts = defaultdict(lambda: attributes)

問題是我傳遞給defaultdict(屬性)的默認字典作為引用傳遞。 我如何將其作為值傳遞? 因此,更改一個鍵中的值不會更改其他鍵中的值

例如 -

accounts[1]['calls'] = accounts[1]['calls'] + 1
accounts[2]['calls'] = accounts[2]['calls'] + 1
print accounts[1]['calls'] # prints 2
print accounts[2]['calls'] # prints 2

我希望他們每個人都打印1,因為我只增加了他們各自的“調用”值一次。

嘗試:

accounts = defaultdict(attributes.copy)

由於Python 3.3 lists 也有copy方法,因此當你需要一個列表作為默認值的dict時,你可以使用與上面相同的方法使用defaultdict

我真的很喜歡warvariuc的解決方案。 但是,請記住,您沒有將dict傳遞給defaultdict ...這將導致TypeError ,因為該參數必須是可調用的 你可以在lambda中使用一個文字。 或者更好的是,定義一個輔助函數:

>>> def attribute():
...     return { 'first_name': None, 'last_name': None, 'calls': 0 }
...
>>> accounts = defaultdict(attribute)
>>> accounts[1]['calls'] = accounts[1]['calls'] + 1
>>> accounts[2]['calls'] = accounts[2]['calls'] + 1
>>> print(accounts[1]['calls'])
1
>>> print(accounts[2]['calls'])
1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM