Переписать список словарей - PullRequest
0 голосов
/ 03 января 2019

У меня есть такой список словаря в 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"
  }  
}

Ответы [ 7 ]

0 голосов
/ 03 января 2019

Я бы поделился простым решением:

>>> {d.pop("compania"):d for d in dd}
0 голосов
/ 03 января 2019

Вы можете просто использовать словарь 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'}}
0 голосов
/ 03 января 2019
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'}}
0 голосов
/ 03 января 2019

с функцией картографирования для возврата нового настроенного списка диктов

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
0 голосов
/ 03 января 2019

Если ваш список называется 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') удаляет запись ключа 'compania' в sub и возвращает соответствующее значение. Затем мы обновляем словарь d, чтобы получить ключ от того, что только что было возвращено, и мы связываемся с этим ключом, остаток от sub после удаления этой записи.

0 голосов
/ 03 января 2019

Мы можем использовать диктовку

{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 - ваши исходные данные

0 голосов
/ 03 января 2019

Вы можете создать словарь, просматривая элементы вашего исходного списка.Предполагая, что ваш список называется car_list:

d = { x["compania"]: {"modelo": x["modelo"], "precio": x["precio"] } for x in car_list }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...