Python: создать список словарей, используя понимание списка - PullRequest
0 голосов
/ 11 ноября 2010

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

Вот что я хочу сделать:

entries_expanded[:] = [{entry['id'], myfunction(entry['supplier'])} for entry in entries_expanded]

Итак, я получаю другой список словарей, только с одной измененной записью.

Синтаксис выше не работает.Как я могу делать то, что я хочу?

Пожалуйста, дайте мне знать, если я должен расширить пример кода.

Ответы [ 2 ]

2 голосов
/ 11 ноября 2010

Разве это не то, что вы хотите?

entries_expanded[:] = [
    dict((entry['id'], myfunction(entry['supplier']))) 
    for entry in entries_expanded
]

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

entryiter = ((entry['id'], entry['supplier']) for entry in entries_expanded)
tupleiter = ((id, myfunction(supplier)) for id, supplier in entryiter)
entries_expanded[:] = [dict(t) for t in tupleiter]

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

entryiter = ((entry['id'], entry['supplier']) for entry in entries_expanded)
tupleiter = ((id, myfunction(supplier)) for id, supplier in entryiter)
entries_expanded[:] = [
    dict((('id', id), ('supplier', supplier))) 
    for id, supplier in tupleiter
]
1 голос
/ 11 ноября 2010

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

entries_expanded[:] = [{'id':entry['id'], 'supplier':myfunction(entry['supplier'])} for entry in entries_expanded]

(если я все равно понял, что вы пытаетесь сделать правильно)

...