2013-07-24 2 views
3

Допустим, у меня есть списокнесколько назначений в Python словаре понимания

demo = [['Adam', 'Chicago', 'Male', 'Bears'], ['Brandon', 'Miami', 'Male', 'Dolphins']] 

Я хочу, чтобы сделать список словарей с помощью понимания, что выглядит как

[{'Adam':'Chicago', 'Gender':'Male', 'Location':'Chicago', 'Team':'Bears'}, 
{'Brandon':'Miami', 'Gender':'Male', 'Location':'Miami', 'Team':'Dolphins'} } 

Это достаточно легко назначить два запуска значения, чтобы получить что-то вроде

{ s[0]:s[1] for s in demo} 

но есть ли законный способ присвоить несколько значений val ЕЭС в этом понимании, что может выглядеть как

{ s[0]:s[1],'Gender':s[2], 'Team':s[3] for s in demo} 

Сво такой конкретный вопрос, и я не знаю, условия для поиска так Im с трудом находя его, и приведенный выше пример дает мне ошибку синтаксиса.

ответ

6

Словарь постигает построение отдельных словарей, а не списков словарей. Вы говорите, что хотите составить список словарей, поэтому используйте это понимание списка.

modified_demo = [{s[0]:s[1],'Gender':s[2], 'Team':s[3]} for s in demo] 
+0

назначение последовательности будет намного лучше. – Marcin

2

Ваше требование выглядит просто странно, вы уверены, что вы не пытаетесь логически назвать поля (что делает гораздо больше смысла):

>>> demo = [['Adam', 'Chicago', 'Male', 'Bears'], ['Brandon', 'Miami', 'Male', 'Dolphins']] 
>>> [dict(zip(['name', 'location', 'gender', 'team'], el)) for el in demo] 
[{'gender': 'Male', 'team': 'Bears', 'name': 'Adam', 'location': 'Chicago'}, {'gender': 'Male', 'team': 'Dolphins', 'name': 'Brandon', 'location': 'Miami'}] 
4

Вы можете использовать почтовый индекс, чтобы превратить каждую запись в список пар ключ-значение:

dicts= [dict(zip(('Name','Gender','Location', 'Team'), data) for data in demo] 

вы не хотите ярлык «Name», вы хотите использовать имя в качестве метки, которая дублирует местоположение. Итак, теперь вам нужно исправить вверх dicts:

for d in dicts: 
    d[d['Name']] = d['Location'] 
    del d['Name'] # or not, if you can tolerate the extra key 

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

dicts = [{name:location,'Location':location,'Gender':gender, 'Team':team} for name,location,gender,team in demo] 
+0

Это кажется более вероятным, что должно быть сделано ... но я думаю, что это до OP ... –

+0

@JonClements Ну, это то же самое, что и ваше решение, с дополнительным шагом. – Marcin

Смежные вопросы