Как создать несколько списков в одном проходе массива в Python 2.7? - PullRequest
0 голосов
/ 06 февраля 2019

Мне нужно сгенерировать 2 списка из списка диктовок типа {'key1': 'val1', 'key2': 'val2', ...}.В функциональном стиле (но 2 прохода):

list_key1 = map(itemgetter('key1'), any_list)
list_key2 = map(itemgetter('key2'), any_list)

В обычном стиле (1 проход):

list_key1, list_key2 = [], []
for i in any_list:
    list_key1.append(i['key1'])
    list_key2.append(i['key2'])

Есть ли способ сделать это в стиле функтинал и 1 проход?

1 Ответ

0 голосов
/ 06 февраля 2019

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

list_key1, list_key2 = zip(*map(itemgetter('key1', 'key2'), any_list))

Если вы предпочитаете, чтобы выходные данные были двумя списками, вы можете отобразить ихв конструктор списка:

list_key1, list_key2 = map(list, zip(*map(itemgetter('key1', 'key2'), any_list)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...