#python #list #dictionary #list-comprehension
Вопрос:
У меня есть список кортежей, и я хочу преобразовать его в список словарей, где для каждого кортежа ключи словаря являются индексом в кортеже, а значение-записью кортежа в этом индексе.
Например, если tuple_list=[('a','b','c'), ('e','f','g')]
тогда цель состоит в том, чтобы иметь processed_tuple_list = [{0:'a',1:'b',2:'c'},{0:'e',1:'f',2:'g'}]
Мое текущее решение состоит в том, чтобы иметь функцию
def tuple2dict(tup): x = {} for j in range(len(tup)): x[j]=tup[j] return x
а потом позвони [tuple2dict(x) for x in tuple_list]
. Я подозреваю, что для этого есть способ понимания списка, и я изначально пытался это сделать
[{j:x[j]} for x in tuple_list for j in range(len(x))]
но это только что дало мне список [{0:'a'},{1:'b'},...]
. Любые советы по более питоническому способу сделать это были бы очень признательны.
Комментарии:
1. Перечислить-это то, что вы ищете.
Ответ №1:
Вы можете создать dict
для каждого кортежа, list
как показано ниже:
gt;gt;gt; tuple_list=[('a','b','c'), ('e','f','g')] # Expanded solution for more explanation gt;gt;gt; [{idx: val for idx, val in enumerate(tpl)} for tpl in tuple_list] [{0: 'a', 1: 'b', 2: 'c'}, {0: 'e', 1: 'f', 2: 'g'}]
Благодаря @ddejohn самый короткий подход:
gt;gt;gt; [dict(enumerate(t)) for t in tuple_list]
Комментарии:
1.
[dict(enumerate(t)) for t in tuple_list]
также работает
Ответ №2:
вы можете использовать zip [dict(zip(range(len(tp)),tp))) for tp in tuple_list]
Комментарии:
1. сверхинженерия
Ответ №3:
Сопоставьте перечисление в конструкторе словаря для каждого кортежа:
processed_tuple_list = [*map(dict,map(enumerate,tuple_list))] [{0: 'a', 1: 'b', 2: 'c'}, {0: 'e', 1: 'f', 2: 'g'}]
Комментарии:
1. Спасибо! это именно то, что я искал.