我想使用 dict 型別的 json_file 中的值更新我的字典。這是我正在使用的 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 沒有更新。我是否決議串列并僅使用鍵和值對創建另一個字典?我無法更新是因為我使用了一個元組來維護順序嗎?
uj5u.com熱心網友回復:
而不是在加載資料后處理資料 - 您可以將自定義函式傳遞給 json.load / loading ,這可以簡化提取:
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/428069.html
標籤:Python json python-2.7
