我需要从这个json文件的不同对象中获取两个值,并使用它们创建一个dict,对int值求和。我得到的第一个值是这样的:
for d in data:
for (date, details) in d['nightlyDetails'].items():
for (key, value) in details.items():
if key == 'accountLabelType':
print(key,value)
但我想创建一个字典,使用defaultdict
创建一个集合,这样每个键名只有一个,然后是总的sumed值。我如何得到totalRent
值并将它们相加,然后只用一个键和一个值来制作一个字典?
这是json文件的外观:
"checkOut": "2016-02-04",
"sourceBusinessName": "xxxx.com",
"folioStatusIdUserDef": "0",
"discounts": 0,
"reservationDate": "2015-06-30 07:13:11",
"additionalGuestIds": [],
"lastNightAuditDate": "0000-00-00",
"adjustmentTotal": 0,
"totalRent": 1280,
"noOfSplits": 1,
"checkoutDate": "2016-02-04 10:19:30",
"noOfNights": 1,
"folioNo": "44108",
"pm_code": "",
"arrivalAmpm": "am",
"folioStatus": "Checked-Out",
"checkinBy": "xxxx",
"reservedBy": "Oboe Reservation",
"event_training_id": "0",
"housekeepingRuleId": "0",
"occupancyAdults": "2",
"nightlyDetails": {
"2016-02-03": {
"accountLabelId": 1,
"accountCategoryId": 6,
"NightlyOverrideType": "0",
"accountCategoryType": "Add-on",
"NightlyRoomTransferId": "0",
"accountLabelType": " Rooms \u74e6\u5382\u623f\u95f4",
"NightlyRateId": "196",
"NightlyActualPrice": "1280.000000",
"NightlydiscountType": "0",
"NightlyOverride": "0.000000",
"rateName": "SQ",
"NightAuditDate": "0000-00-00",
"NightlyPaidByGroup": "0",
"NightlyOfferedPrice": "1280.000000",
"Nightlydiscount": "0.00",
"NightlyActualDiscountPrice": 1280
}
我真正需要的是这样的字典:
Homes:10000
Rooms:3500
因此,一个dict只包含每个accountLabelType
中的一个,以及每种类型的所有totalRent
值的总和。这个json只是一个演示,因为它很长。它重复了很多次,就像房间预订一样多。
答案 0 :(得分:1)
我假设您已经将JSON文件解析为字典列表data
。我总结了totalRent
中每个accountLabelType
的{{1}}值:
dict
答案 1 :(得分:0)
答案 2 :(得分:0)
不完全确定你的要求,但......
from operator import itemgetter
ig = itemgetter('totalRent')
rents = map(ig, data)
totalRent = sum(rents)
您可以通过以下方法获取整个totalRent
data
中dict
值的总和。
我没有理解为什么你会想要defaultdict
。
除非您要提取除totalRent
以外的更多值。
您可能希望更准确地了解您实际需要的数据。 就像给我们一个输出应该是什么样子的样本字典。
答案 3 :(得分:-1)
您可以使用object_hook将dict转换为对象,然后使用该对象执行所有操作。它将易于处理并提供更清晰的方法,然后直接为复杂的操作操作dict。
object_hook是一个可选函数,将使用任何对象文字解码(dict)的结果调用。将使用object_hook的返回值而不是dict。
另请查看object_pairs_hook。