如何使用 JSON 中的值更新我的字典?
How do I update my dictionary with values from JSON?
我想用 json_file 中的值更新我的字典,它是 dict 类型。这是我正在使用的 JSON 字典格式。
json_file: {
"appointmentDeltaEmployee": {
"SSN": "XXXXXXXX",
"dutyBasis": "1",
"normalHours": 80
},
"deductionsDeltaEmployee": {
"unionDuesAnniversaryDay": null,
"DFASUnionCode": null
},
"followUpDeltaEmployee": [
{
"noac05followUpCode": null,
"followUpCode": "S2",
"followUpDate": "2019-10-01"
}
],
"laborDetailsDeltaEmployee": [
{
"functionalCode": "00",
"fundControlPointFor1stPosition": "001",
"cityTaxSatellite": null,
"fMSFundCode": "012012",
"primaryLaborCodePercentage": 100,
"laborDistributionCode": "BBBB",
"laborcostcenter": "5555"
}
],
"leaveDetailsDeltaEmployee": {
"disabledVeteranLeave": "N",
"leaveGroup": "2",
"leaveRestriction": "N",
"eligibleForLeaveNextPayPeriod": "N"
}
}
如您所见,有 2 个键具有字典列表。
我需要维护特定的输出顺序,因此我创建了一个包含 None 个值的有序字典。
ordered_keys = ("leaveGroup", "functionalCode", "DFASUnionCode", "normalHours")
order_dic_keys = OrderedDict((k, None) for k in ordered_keys)
如果我打印 order_dic_keys 这就是我得到的
OrderedDict([('leaveGroup', None), ('functionalCode', None), ('DFASUnionCode', None), ('normalHours', None)])
我想使用 for 循环并更新 order_dic_keys 并添加 json_file 中的值。这是我迷路并点击字典列表的地方。
for key in order_dic_keys.keys():
for key2, values in json_file.items(): # key2 is followUpDeltaEmployee, values is [{u'followUpDate': u'2019-10-01', u'noac05followUpCode': None, u'followUpCode': u'S2'}]
if key in json_file.items():
order_dic_keys.update(json_file[values])
我的 order_dic_keys 没有更新。我是否解析列表并创建另一个仅包含键值对的字典?是不是我用了元组来维持顺序,所以无法更新?
无需在数据加载后对其进行处理 - 您可以将自定义函数传递给 json.load / loads,这样可以简化提取:
ordered_keys = ("leaveGroup", "functionalCode", "DFASUnionCode", "normalHours")
order_dic_keys = OrderedDict.fromkeys(ordered_keys)
def extract_data(obj):
for key, value in obj:
if key in order_dic_keys:
order_dic_keys[key] = value
>>> json.loads(data, object_pairs_hook=extract_data)
>>> order_dic_keys
OrderedDict([('leaveGroup', '2'),
('functionalCode', '00'),
('DFASUnionCode', None),
('normalHours', 80)])
完整代码示例:
import json
from collections import OrderedDict
def extract_data(obj):
for key, value in obj:
if key in order_dic_keys:
order_dic_keys[key] = value
return dict(obj)
ordered_keys = ("leaveGroup", "functionalCode", "DFASUnionCode", "normalHours")
order_dic_keys = OrderedDict.fromkeys(ordered_keys)
with open("file.json") as f:
json_file = json.load(f, object_pairs_hook=extract_data)
print(order_dic_keys)
我想用 json_file 中的值更新我的字典,它是 dict 类型。这是我正在使用的 JSON 字典格式。
json_file: {
"appointmentDeltaEmployee": {
"SSN": "XXXXXXXX",
"dutyBasis": "1",
"normalHours": 80
},
"deductionsDeltaEmployee": {
"unionDuesAnniversaryDay": null,
"DFASUnionCode": null
},
"followUpDeltaEmployee": [
{
"noac05followUpCode": null,
"followUpCode": "S2",
"followUpDate": "2019-10-01"
}
],
"laborDetailsDeltaEmployee": [
{
"functionalCode": "00",
"fundControlPointFor1stPosition": "001",
"cityTaxSatellite": null,
"fMSFundCode": "012012",
"primaryLaborCodePercentage": 100,
"laborDistributionCode": "BBBB",
"laborcostcenter": "5555"
}
],
"leaveDetailsDeltaEmployee": {
"disabledVeteranLeave": "N",
"leaveGroup": "2",
"leaveRestriction": "N",
"eligibleForLeaveNextPayPeriod": "N"
}
}
如您所见,有 2 个键具有字典列表。 我需要维护特定的输出顺序,因此我创建了一个包含 None 个值的有序字典。
ordered_keys = ("leaveGroup", "functionalCode", "DFASUnionCode", "normalHours")
order_dic_keys = OrderedDict((k, None) for k in ordered_keys)
如果我打印 order_dic_keys 这就是我得到的
OrderedDict([('leaveGroup', None), ('functionalCode', None), ('DFASUnionCode', None), ('normalHours', None)])
我想使用 for 循环并更新 order_dic_keys 并添加 json_file 中的值。这是我迷路并点击字典列表的地方。
for key in order_dic_keys.keys():
for key2, values in json_file.items(): # key2 is followUpDeltaEmployee, values is [{u'followUpDate': u'2019-10-01', u'noac05followUpCode': None, u'followUpCode': u'S2'}]
if key in json_file.items():
order_dic_keys.update(json_file[values])
我的 order_dic_keys 没有更新。我是否解析列表并创建另一个仅包含键值对的字典?是不是我用了元组来维持顺序,所以无法更新?
无需在数据加载后对其进行处理 - 您可以将自定义函数传递给 json.load / loads,这样可以简化提取:
ordered_keys = ("leaveGroup", "functionalCode", "DFASUnionCode", "normalHours")
order_dic_keys = OrderedDict.fromkeys(ordered_keys)
def extract_data(obj):
for key, value in obj:
if key in order_dic_keys:
order_dic_keys[key] = value
>>> json.loads(data, object_pairs_hook=extract_data)
>>> order_dic_keys
OrderedDict([('leaveGroup', '2'),
('functionalCode', '00'),
('DFASUnionCode', None),
('normalHours', 80)])
完整代码示例:
import json
from collections import OrderedDict
def extract_data(obj):
for key, value in obj:
if key in order_dic_keys:
order_dic_keys[key] = value
return dict(obj)
ordered_keys = ("leaveGroup", "functionalCode", "DFASUnionCode", "normalHours")
order_dic_keys = OrderedDict.fromkeys(ordered_keys)
with open("file.json") as f:
json_file = json.load(f, object_pairs_hook=extract_data)
print(order_dic_keys)