Преобразовать заказанный словарь в другой формат - PullRequest
1 голос
/ 25 марта 2020

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

import csv
from collections import OrderedDict

list_of_dicts = [OrderedDict([('key_a','value_a'),('key_b','value_b')]), 
                 OrderedDict([('key_a','value_c'),('key_b','value_d')]),
                 OrderedDict([('key_a','value_e'),('key_b','value_f')])]

Необходимо преобразовать вышеприведенное в следующее ( БЕЗ ИСПОЛЬЗОВАНИЯ EXPLICIT FOR L OOP):

convertedDictionary = [OrderedDict([('value_a','value_b')]),
                       OrderedDict([('value_c','value_d')]),
                       OrderedDict([('value_e','value_f')])]

1 Ответ

3 голосов
/ 25 марта 2020

первый шаг: получить списки: достаточно простое отображение dict.values на слова:

>>> list(map(dict.values,list_of_dicts))
[['value_a', 'value_b'], ['value_c', 'value_d'], ['value_e', 'value_f']]

Теперь для окончательного результата, без циклов, единственной альтернативой является map с lambda, но это ужасно

>>> list(map(lambda x : OrderedDict((x,)),map(dict.values,list_of_dicts)))
[OrderedDict([('value_a', 'value_b')]),
 OrderedDict([('value_c', 'value_d')]),
 OrderedDict([('value_e', 'value_f')])]

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

[OrderedDict((x,)) for x in map(dict.values,list_of_dicts)]

примечание: зачем использовать OrderedDict, если у вас есть только 1 значение на словарь ? зачем хранить только одно значение в словаре? Если это не шаг инициализации, модель данных выглядит сомнительной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...