[英]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.尝试这个。
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))
{
"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.