Как преобразовать список dict в dict
Как преобразовать список dict в dict. Ниже приведен список dict
data = [{'name': 'John Doe', 'age': 37, 'sex': 'M'},
{'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'},
{'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}]
to
data = {{'name': 'John Doe', 'age': 37, 'sex': 'M'},
{'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'},
{'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}}
Ответы
Ответ 1
Возможное решение с использованием имен в качестве новых ключей:
new_dict = {}
for item in data:
name = item['name']
new_dict[name] = item
С помощью python 3.x вы также можете использовать методы распознавания для одного и того же подхода более приятным образом:
new_dict = {item['name']:item for item in data}
Как было предложено в комментарии Пола МакГуара, если вы не хотите, чтобы имя во внутреннем dict, вы можете сделать:
new_dict = {}
for item in data:
name = item.pop('name')
new_dict[name] = item
Ответ 2
Если dicts не будет делиться ключом, вы можете использовать:
dict((key,d[key]) for d in data for key in d)
Возможно, лучше в вашем случае генерировать dict со списками как значения?
newdict={}
for k,v in [(key,d[key]) for d in data for key in d]:
if k not in newdict: newdict[k]=[v]
else: newdict[k].append(v)
Это дает:
>>> newdict
`{'age': [37, 17, 57], 'name': ['John Doe', 'Lisa Simpson', 'Bill Clinton'], 'sex': ['M', 'F', 'M']}`
Ответ 3
Возможно, вы хотите, чтобы имя было ключевым? Вы действительно не указываете, так как ваш второй пример недействителен и не имеет смысла.
Обратите внимание, что мой пример удаляет ключ "имя" из значения, которое может быть желательно (или, возможно, нет).
data = [{'name': 'John Doe', 'age': 37, 'sex': 'M'},
{'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'},
{'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}]
newdata = {}
for entry in data:
name = entry.pop('name') #remove and return the name field to use as a key
newdata[name] = entry
print newdata
##{'Bill Clinton': {'age': 57, 'sex': 'M'},
## 'John Doe': {'age': 37, 'sex': 'M'},
## 'Lisa Simpson': {'age': 17, 'sex': 'F'}}
print newdata['John Doe']['age']
## 37
Также имейте в виду, что Лиза моложе 17 лет, поэтому даже не думайте об этом.;)
Ответ 4
indice = 1
mlista = [{'uno':1,'dos':2,'tres':3}, {'cuatro':4,'cinco':5,'seis':6}]
mndic = {}
mndic = dict((mlista.index(d)+indice, d) for d in mlista)
print(mndic)
#output {1: {'uno': 1, 'dos': 2, 'tres': 3}, 2: {'cuatro': 4, 'cinco': 5, 'seis': 6}}
Ответ 5
Он также может быть записан следующим образом:
data = {0: {'name': 'John Doe', 'age': 37, 'sex': 'M'},
1: {'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'},
2: {'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}}