在JSON数组中标识具有最小值的嵌套对象

时间:2019-03-17 09:27:30

标签: python json

我有一个具有以下结构的JSON文件。

我想确定收费最低的频道并打印其详细信息(channel_id,node1,node2和总费用)

通道的总费用是两个节点的费用之和:     total_fee =费用节点1 +费用节点2

{
"edges": [
    {
        "channel_id": "1",
        "node1": "Alice",
        "node2": "Bob",
        "node1_policy": {
            "fee": "1000"
        },
        "node2_policy": {
            "fee": "1000"
        }
    },
    {
        "channel_id": "2",
        "node1": "Caleb",
        "node2": "Daniel",
        "node1_policy": {
            "fee": "500",
        },
        "node2_policy": {
            "fee": "3000",
        }
    },
    {
        "channel_id": "3",
        "node1": "Elen",
        "node2": "Fatih",
        "node1_policy": {
            "fee": "2000"
        },
        "node2_policy": {
            "fee": "5000"
        }
    }

}

完成此任务的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

用几行代码即可做到这一点很简单。我应该指出,由于fee键后的多余逗号,您的JSON文件格式无效。考虑删除它们以使其有效:

import json

with open('channels.json', 'r') as inFile:
    jsonData = json.loads(inFile.read())
    minimum = min([elem for elem in jsonData['edges']], key=lambda e: int(e['node1_policy']['fee']) + int(e['node2_policy']['fee']))
    print(minimum)

输出:

{'channel_id': '1', 'node1': 'Alice', 'node2': 'Bob', 'node1_policy': {'fee': '1000'}, 'node2_policy': {'fee': '1000'}}