简体   繁体   English

在python3中使用参数键将列表转换为字典

[英]Convert list to dictionary with parameter keys in python3

I'm starting to use python and i'm block with this problem:我开始使用 python 并且遇到了这个问题:

I have a list with this format:我有一个这种格式的列表:

arr = [{'Hotel':'Hotel 1', 'Room':'Room 1', 'Board':'Board 1', 'Precio':100},
  {'Hotel':'Hotel 1', 'Room':'Room 1', 'Board':'Board 2', 'Precio':130},
  {'Hotel':'Hotel 1', 'Room':'Room 2', 'Board':'Board 1', 'Precio':230},
  {'Hotel':'Hotel 1', 'Room':'Room 2', 'Board':'Board 2', 'Precio':300},
  {'Hotel':'Hotel 2', 'Room':'Room 4', 'Board':'Board 1', 'Precio':111},
  {'Hotel':'Hotel 2', 'Room':'Room 2', 'Board':'Board 2', 'Precio':400},
  {'Hotel':'Hotel 2', 'Room':'Room 1', 'Board':'Board 2', 'Precio':230}]

and I need to turn it into a dictionary with this format(add Hotel2 at the structure, the page doesnt let me paste too much code):并且我需要将其转换为具有这种格式的字典(在结构处添加 Hotel2,该页面不允许我粘贴太多代码):

{
"Hotel 1": {
    "Room 2": {
        "Board 2": [
            {
                "Hotel": "Hotel 1",
                "Precio": 300,
                "Room": "Room 2",
                "Board": "Board 2"
            }
        ],
        "Board 1": [
            {
                "Hotel": "Hotel 1",
                "Precio": 230,
                "Room": "Room 2",
                "Board": "Board 1"
            }
        ]
    },
    "Room 1": {
        "Board 2": [
            {
                "Hotel": "Hotel 1",
                "Precio": 130,
                "Room": "Room 1",
                "Board": "Board 2"
            }
        ],
        "Board 1": [
            {
                "Hotel": "Hotel 1",
                "Precio": 100,
                "Room": "Room 1",
                "Board": "Board 1"
            }
        ]
    }
},

Could you help me to do it with a function??你能帮我用一个函数来做吗?? the function expect two parameters, the list and the keys:该函数需要两个参数,列表和键:

def function_name(arr, ['Hotel', 'Room', 'Board']):

Thank's谢谢

Try this.尝试这个。

Code代码

import json


par = ['Hotel', 'Room', 'Board']


arr = [
    {'Hotel':'Hotel 1', 'Room':'Room 1', 'Board':'Board 1', 'Precio':100},
    {'Hotel':'Hotel 1', 'Room':'Room 1', 'Board':'Board 2', 'Precio':130},
    {'Hotel':'Hotel 1', 'Room':'Room 2', 'Board':'Board 1', 'Precio':230},
    {'Hotel':'Hotel 1', 'Room':'Room 2', 'Board':'Board 2', 'Precio':300},
    {'Hotel':'Hotel 2', 'Room':'Room 4', 'Board':'Board 1', 'Precio':111},
    {'Hotel':'Hotel 2', 'Room':'Room 2', 'Board':'Board 2', 'Precio':400},
    {'Hotel':'Hotel 2', 'Room':'Room 1', 'Board':'Board 2', 'Precio':230}
]


def function_name(arr, par):
    res = {}

    # Save unique hotels.
    hu = []
    for a in arr:
        hu.append(a[par[0]])
    hu = list(set(hu))

    # Save unique rooms.
    ru = []
    for a in arr:
        ru.append(a[par[1]])
    ru = list(set(ru))

    # Save unique board.
    bu = []
    for a in arr:
        bu.append(a[par[2]])
    bu = list(set(bu))
    

    # Find board for each unique hotel and room
    for h in hu:
        rr = {}
        for r in ru:
            bb = {}
            for b in bu:
                myb = []
                for a in arr:
                    ah = a['Hotel']
                    ar = a['Room']
                    ab = a['Board']
                    p = a['Precio']
                    if h == ah and r == ar and b == ab:  # update board for each specific value of hotel, and room
                        myb.append({'Precio': p, 'Hotel': h, 'Room': r, 'Board': b})  # save board etc.
                if myb:
                    bb.update({b: myb})  # save board and read next unique board

            if bb:
                rr.update({r: bb})  # save room and read next unique room

        if rr:
            res.update({h: rr})  # save hotel and read next unique hotel

    return res


# Test
res = function_name(arr, par)
print(json.dumps(res, sort_keys=True, indent=4))

Output输出

{
    "Hotel 1": {
        "Room 1": {
            "Board 1": [
                {
                    "Board": "Board 1",
                    "Hotel": "Hotel 1",
                    "Precio": 100,
                    "Room": "Room 1"
                }
            ],
            "Board 2": [
                {
                    "Board": "Board 2",
                    "Hotel": "Hotel 1",
                    "Precio": 130,
                    "Room": "Room 1"
                }
            ]
        },
        "Room 2": {
            "Board 1": [
                {
                    "Board": "Board 1",
                    "Hotel": "Hotel 1",
                    "Precio": 230,
                    "Room": "Room 2"
                }
            ],
            "Board 2": [
                {
                    "Board": "Board 2",
                    "Hotel": "Hotel 1",
                    "Precio": 300,
                    "Room": "Room 2"
                }
            ]
        }
    },
    "Hotel 2": {
        "Room 1": {
            "Board 2": [
                {
                    "Board": "Board 2",
                    "Hotel": "Hotel 2",
                    "Precio": 230,
                    "Room": "Room 1"
                }
            ]
        },
        "Room 2": {
            "Board 2": [
                {
                    "Board": "Board 2",
                    "Hotel": "Hotel 2",
                    "Precio": 400,
                    "Room": "Room 2"
                }
            ]
        },
        "Room 4": {
            "Board 1": [
                {
                    "Board": "Board 1",
                    "Hotel": "Hotel 2",
                    "Precio": 111,
                    "Room": "Room 4"
                }
            ]
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM