我有这样一本json字典:
nxt = {"name": names[a], "profile_id": indata["profile_id"], "firstname": firstnames[a], "middlename": middlenames[a], "lastname": lastnames[a],
"e_mail": e_mails[a], "phone_number": phone_numbers[a], "location": locations[a], "sex": genders[a],
"user_id": indata["user_id"], "updated_by": indata["username"]}
我想更新字典:
cpnxt = nxt
del cpnxt['profile_id'], cpnxt['user_id'], cpnxt['updated_by']
nxt.update({"jsondata": cpnxt})
data.append(nxt)
我希望得到这样的结果:
nxt = {'e_mail': '', 'firstname': 'John', 'jsondata': "{'phone_number': '', 'firstname': 'John', 'middl...ame': 'John Smith', 'e_mail': '', 'location': ''}", 'lastname': 'Smith', 'location': '', 'middlename': '', 'name': 'John Smith', 'phone_number': '', 'sex': 'M'}
但我得到了这样一个结果:
nxt = {'e_mail': '', 'firstname': 'John', 'jsondata': {'e_mail': '', 'firstname': 'John', 'jsondata': {'e_mail': '', 'firstname': 'John', 'jsondata': {'e_mail': '', 'firstname': 'John', 'jsondata': {'e_mail': '', 'firstname': 'John', 'jsondata': {'e_mail': '', 'firstname': 'John', 'jsondata': {...}, 'lastname': 'Smith', 'location': '', 'middlename': '', 'name': 'John Smith', 'phone_number': '', 'sex': 'M'}, 'lastname': 'Smith', 'location': '', 'middlename': '', 'name': 'John Smith', 'phone_number': '', 'sex': 'M'}, 'lastname': 'Smith', 'location': '', 'middlename': '', 'name': 'John Smith', 'phone_number': '', 'sex': 'M'}, 'lastname': 'Smith', 'location': '', 'middlename': '', 'name': 'John Smith', 'phone_number': '', 'sex': 'M'}, 'lastname': 'Smith', 'location': '', 'middlename': '', 'name': 'John Smith', 'phone_number': '', 'sex': 'M'}, 'lastname': 'Smith', 'location': '', 'middlename': '', 'name': 'John Smith', 'phone_number': '', 'sex': 'M'}
这真的很烦人。我不知道我在哪里犯了错
我该如何解决这个恼人的问题
赋值将创建对同一对象的新引用,而不是副本。如果要更改词典但保留副本,请显式创建副本:
这将创建一个浅副本;一个新的字典,把键和值原封不动地复制过来。您可以更改新副本中的键,但是如果您更改了值(例如,附加到列表,或者对
nxt['jsondata']
嵌套字典进行了更改),您仍然可以看到这些更改是共享的在您的例子中,您只删除了键,并替换了另一个键的值,因此浅拷贝就足够了。如果需要deep副本,其中值也是递归复制的,请使用^{} function
相关问题 更多 >
编程相关推荐