我在python中有这种字典列表
[
{
"compania": "Fiat",
"modelo": "2014",
"precio": "1000"
},
{
"compania": "Renault",
"modelo": "2014",
"precio": "2000"
},
{
"compania": "Volkwagen",
"modelo": "2014",
"precio": "3000"
},
{
"compania": "Chevrolet",
"modelo": "2014",
"precio": "1000"
},
{
"compania": "Peugeot",
"modelo": "2014",
"precio": "2000"
}
]
我想转换成这种字典列表列表
{
"Fiat": {
"modelo": "2014",
"precio": "1000"
},
"Renault": {
"modelo": "2014",
"precio": "2000"
},
"Volkwagen": {
"modelo": "2014",
"precio": "3000"
},
"Chevrolet": {
"modelo": "2014",
"precio": "1000"
},
"Peugeot": {
"modelo": "2014",
"precio": "2000"
}
}
答案 0 :(得分:3)
我们可以使用dict理解
{a.get('compania'): {k: v for k, v in a.items() if k != 'compania'} for a in c}
{'Fiat': {'modelo': '2014', 'precio': '1000'},
'Renault': {'modelo': '2014', 'precio': '2000'},
'Volkwagen': {'modelo': '2014', 'precio': '3000'},
'Chevrolet': {'modelo': '2014', 'precio': '1000'},
'Peugeot': {'modelo': '2014', 'precio': '2000'}}
其中c
是您的原始数据
答案 1 :(得分:2)
您可以通过遍历原始列表的元素来创建字典。假设您的列表名为car_list
:
d = { x["compania"]: {"modelo": x["modelo"], "precio": x["precio"] } for x in car_list }
答案 2 :(得分:1)
假设您的列表名为l
,则可以使用简单的迭代并构建新的字典d
来完成此操作:
d = {}
for sub in l:
d[sub.pop('compania')] = sub
这在字典d
中产生:
{'Chevrolet': {'modelo': '2014', 'precio': '1000'},
'Fiat': {'modelo': '2014', 'precio': '1000'},
'Peugeot': {'modelo': '2014', 'precio': '2000'},
'Renault': {'modelo': '2014', 'precio': '2000'},
'Volkwagen': {'modelo': '2014', 'precio': '3000'}}
说明:对于列表(sub
)中的每个词典:sub.pop('compania')
删除sub
中键“ compania”的条目并返回其关联值。然后,我们将更新字典d
,使其具有刚返回的键,然后将其与该键相关联,即删除该条目后sub
的其余部分。
答案 3 :(得分:0)
具有映射器功能,可返回新的自定义字典列表
a=[
{
"compania": "Fiat",
"modelo": "2014",
"precio": "1000"
},
{
"compania": "Renault",
"modelo": "2014",
"precio": "2000"
},
{
"compania": "Volkwagen",
"modelo": "2014",
"precio": "3000"
},
{
"compania": "Chevrolet",
"modelo": "2014",
"precio": "1000"
},
{
"compania": "Peugeot",
"modelo": "2014",
"precio": "2000"
}
]
def mapper(temp): # define a mapper
new_temp={}
new_temp[temp['compania']]={k:v for k,v in temp.items() if k!='compania'}
return new_temp
map(mapper,a) # call map function with mapper and list as argument
答案 4 :(得分:0)
result = {}
for d in l:
# Store the value of the key 'compania' before popping it from the small dictionary d
compania = d['compania']
d.pop('compania')
# Construct new dictionary with key of the compania and value of the small dictionary without the compania key/value pair
result[compania] = d
print(result)
输出:
{'Chevrolet': {'modelo': '2014', 'precio': '1000'},
'Fiat': {'modelo': '2014', 'precio': '1000'},
'Peugeot': {'modelo': '2014', 'precio': '2000'},
'Renault': {'modelo': '2014', 'precio': '2000'},
'Volkwagen': {'modelo': '2014', 'precio': '3000'}}
答案 5 :(得分:0)
我将分享简单的解决方案:
>>> {d.pop("compania"):d for d in dd}
答案 6 :(得分:0)
您可以简单地使用字典update来生成您喜欢的新字典。
from pprint import PrettyPrinter as pp
d={}
for i in l: # 'l' represents your list of dictionary
d.update({i['compania']:{"modelo":i['modelo'],"precio":i['precio']}})
print(pp(indent=4).pprint(d))
输出:
{ 'Chevrolet': {'modelo': '2014', 'precio': '1000'},
'Fiat': {'modelo': '2014', 'precio': '1000'},
'Peugeot': {'modelo': '2014', 'precio': '2000'},
'Renault': {'modelo': '2014', 'precio': '2000'},
'Volkwagen': {'modelo': '2014', 'precio': '3000'}}