我正在做一個專案,需要使用 UserDict 而不是 dict。我正在匯入一個 JSON 檔案,該檔案是一個包含更多字典的串列的字典。
這是一些示例代碼和我看到的行為差異:
import json
from collections import UserDict
import pprint
person_string = '{"name" : "Bob", \
"age" : 25, \
"addresses":[{"city" : "Greenville", "state" : "NC" }, \
{"city" : "Whiteville", "state" : "NC" }]}'
# dict Example
person_dict = json.loads(person_string)
addresses = person_dict['addresses']
addr_1 = addresses[0]
print(addr_1)
print("\n")
# Add street to the first city entry
addr_1['street'] = "123 The Road"
print(addr_1)
print("\n")
pprint.pprint(person_dict)
print("\n")
# UserDict Example
person_user_dict = UserDict(json.loads(person_string))
user_addresses = person_user_dict['addresses']
user_addr_1 = UserDict(user_addresses[0])
print(user_addr_1)
print("\n")
# Add street to the first city entry
user_addr_1['street'] = "123 The Road"
print(user_addr_1)
print("\n")
pprint.pprint(person_user_dict)
輸出:
# Dictionary Example
{'city': 'Greenville', 'state': 'NC'}
{'city': 'Greenville', 'state': 'NC', 'street': '123 The Road'}
{'name': 'Bob',
'age': 25,
'addresses': [{'city': 'Greenville', 'state': 'NC', 'street': '123 The Road'},
{'city': 'Whiteville', 'state': 'NC'}]}
# UserDict Example
{'city': 'Greenville', 'state': 'NC'}
{'city': 'Greenville', 'state': 'NC', 'street': '123 The Road'}
{'name': 'Bob',
'age': 25,
'addresses': [{'city': 'Greenville', 'state': 'NC'}, <---- The 'street' is missing
{'city': 'Whiteville', 'state': 'NC'}]}
為什么新鍵沒有被添加到 person_user_dict 中,我怎樣才能讓 UserDict 表現得像字典一樣?
uj5u.com熱心網友回復:
因為你在這里創建了一個新字典:
user_addr_1 = UserDict(user_addresses[0])
這一點也不意外,事實上,這就是dict作業原理。如果你這樣做,你會看到完全相同的行為:
user_addr_1 = dict(user_addresses[0])
您需要將所有 dict 遞回轉換為UserDict物件。但實際上,您只想使用object_pairs_hookjson 解碼器:
In [3]: import json
...: from collections import UserDict
...:
...: person_string = '{"name" : "Bob", \
...: "age" : 25, \
...: "addresses":[{"city" : "Greenville", "state" : "NC" }, \
...: {"city" : "Whiteville", "state" : "NC" }]}'
In [4]: person_dict = json.loads(person_string, object_pairs_hook=UserDict)
In [5]: person_dict
Out[5]: {'name': 'Bob', 'age': 25, 'addresses': [{'city': 'Greenville', 'state': 'NC'}, {'city': 'Whiteville', 'state': 'NC'}]}
In [6]: type(person_dict)
Out[6]: collections.UserDict
In [7]: type(person_dict['addresses'][0])
Out[7]: collections.UserDict
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/352923.html
上一篇:如何合并具有不同欄位的記錄集
