如何正确复制嵌套的字典对象? [英] How can I properly copy nested dictionary objects?
本文介绍了如何正确复制嵌套的字典对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用 Python 2.7 开发一个项目,该项目具有复杂"的字典结构,并且我正在尝试执行以下操作:
generic_dict = {
'user': {'created': {}, 'modified': {}, 'errors': {}},
'usermon': {'created': {}, 'modified': {}, 'ignored': {}, 'errors': {}}
log_data = {
'esp': generic_dict,
'por': generic_dict,
'sui': generic_dict,
'ben': generic_dict,
'mex': generic_dict,
'arg': generic_dict,
}
我试图使用通用dict以避免重复代码,但是如果我这样做,我会遇到一个问题,当我修改任何国家/地区的dicts(esp,ben,por)时,它们都是同时修改的. /p>
我们假设字典是空的,我这样做
log_data['esp']['user']['created']['today'] = 'asdasdasda'
其他所有字典现在都具有相同的值,就像generic_dict一样.
print log_data['ben']['user']['created']
Output: {'today': 'asdasdasda'}
print log_data['ben']['user']['created']
Output: {'today': 'asdasdasda'}
我了解发生了什么,但我不知道如何避免这种情况
- 复制嵌套字典对象的最佳方法是哪一种?
解决方案
解决方案
You can use copy.deepcopy
to create a new copy of the generic_dict
object, like this
from copy import deepcopy
log_data = {
'esp': deepcopy(generic_dict),
'por': deepcopy(generic_dict),
'sui': deepcopy(generic_dict),
'ben': deepcopy(generic_dict),
'mex': deepcopy(generic_dict),
'arg': deepcopy(generic_dict),
}
Otherwise, you can have a constructor function, like this
def generic_dict():
return {'user': {'created': {}, 'modified': {}, 'errors': {}},
'usermon': {'created': {}, 'modified':{}, 'ignored': {}, 'errors': {}}}
And then call it to create a new dictionary object every time, like this
log_data = {
'esp': generic_dict(),
'por': generic_dict(),
'sui': generic_dict(),
'ben': generic_dict(),
'mex': generic_dict(),
'arg': generic_dict(),
}
这篇关于如何正确复制嵌套的字典对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文