2016-02-26 2 views
2

Это то, что я делаю:Как сделать словарь из списка списков

Где данные список списков в виде [[int1, int2, int3], [int1, int2,int3]].

Я хочу, чтобы словарь выглядел так: {int1: [int2, int3], in2:[int2, int3]}. Я проверяю, какой размер данных до понимания словаря, и он равен 1417.

Затем я проверяю, что такое длина словаря, и что-то вроде 11, я не знаю, что происходит с список данных, поскольку все элементы не копируются в containsBacon.

def makeComprehension(data): 
    containsBacon = dict([(movies[2], movies[0:2]) for movies in data]) 
+0

Каждый вложенный список содержит 3 элемента, не так ли? Итак, какой элемент вы хотите быть ключом словаря, первым или последним? Ваше описание указывает на первое, но ваш код использует 'movies [2]', который является последним. Что правильно? –

+1

'containsBacon = dict ([фильмы [0], фильмы [1:]) для фильмов в данных])' works – Ananth

+0

Создав 'containsBacon', вы тогда собираетесь его вернуть? Или вы ожидаете, что он будет доступен как глобальный? Если вы хотите вернуть его, вам нужно добавить 'return containsBacon' до конца. Если вы ожидаете, что он будет доступен в глобальном режиме, вам нужно добавить 'global containsBacon' в начало функции. В противном случае функция ничего не сделает. –

ответ

0

Вот способ сделать это:

>>> l = [[1,2,3], [10,20,30]] 
>>> d = {m[0]:m[1:] for m in l} 
>>> d 
{1: [2, 3], 10: [20, 30]} 

Обратите внимание, что не все элементы будут в результирующем словаре, потому что если два списка начинается с одними и теми же элементами, это создаст тот же ключ , и поэтому не появится.

Если вы хотите, чтобы все ваши оригинальные элементы в результате словаря, вы можете сделать следующее:

>>> l = [[1,2,3], [10,20,30], [1,5,6] 
>>> {m[0]:[x for n in l if n[0]==m[0] for x in n[1:]] for m in l} 
{1: [2, 3, 5, 6], 10: [20, 30]} 

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

  • Нет связанных вопросов^_^