使用json文件

时间:2016-03-16 13:20:25

标签: python json dictionary

我需要从这个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只是一个演示,因为它很长。它重复了很多次,就像房间预订一样多。

4 个答案:

答案 0 :(得分:1)

我假设您已经将JSON文件解析为字典列表data。我总结了totalRent中每个accountLabelType的{​​{1}}值:

dict

答案 1 :(得分:0)

使用the Python JSON module

import json

Dict = json.load(open(file_name))

然后Dict将是一本字典。

答案 2 :(得分:0)

不完全确定你的要求,但......

from operator import itemgetter
ig = itemgetter('totalRent')
rents = map(ig, data)
totalRent = sum(rents)

您可以通过以下方法获取整个totalRent datadict值的总和。

我没有理解为什么你会想要defaultdict。 除非您要提取除totalRent以外的更多值。

您可能希望更准确地了解您实际需要的数据。 就像给我们一个输出应该是什么样子的样本字典。

答案 3 :(得分:-1)

您可以使用object_hook将dict转换为对象,然后使用该对象执行所有操作。它将易于处理并提供更清晰的方法,然后直接为复杂的操作操作dict。

  

object_hook是一个可选函数,将使用任何对象文字解码(dict)的结果调用。将使用object_hook的返回值而不是dict。

另请查看object_pairs_hook。