2013-10-05 3 views
1

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

M = {index of list: list} 

N = {index of list: reversed list} 

Пример:

Для начала у меня есть следующий список:

L = [[20, 56], [23, 24], [23, 12], [22, 21], [26, 48], [26, 24]] 

поэтому конечный результат будет следующим:

M = {0: [56, 20], 1: [24, 23], 2: [12, 23], 3: [21, 22], 4: [48, 26], 5: [24, 26]} 
N = {0: [20, 56], 1: [23, 24], 2: [23, 12], 3: [22, 21], 4: [26, 48], 5: [26, 24]} 

Я попытался это:

M = {} 
N = {} 
for index, pair in enumerate(L): 
    M[index] = pair 
    N[index] = pair.reverse() 

но результат этого:

M = {0: [56, 20], 1: [24, 23], 2: [12, 23], 3: [21, 22], 4: [48, 26], 5: [24, 26]} 
N = {0: [56, 20], 1: [24, 23], 2: [12, 23], 3: [21, 22], 4: [48, 26], 5: [24, 26]} 

Я решил ее делать:

N[index] = pair[::-1] 

, но может кто-то пожалуйста, скажите мне, почему это происходит?

+3

Я не уверен, что верю в ваши результаты. '.reverse()' действует на месте и возвращает 'None', поэтому вы не должны получать' N == {0: None, 1: None, 2: None, 3: None, 4: None, 5: None } '? – DSM

ответ

3

list.reverse является операцией на месте, поскольку ключи в обоих dicts указывают на один и тот же объект, поэтому все ссылки затронуты.

>>> a = [1, 2, 3] 
>>> b = a 
>>> a.reverse() 
>>> a 
[3, 2, 1] 
>>> b 
[3, 2, 1] 

Чтобы получить новую обращенную копию списка вы можете использовать a[::-1] или list(reversed(a)).

Но a[::-1] должен быть всегда предпочтительнее list(reversed(a)), если вы хотите перевернутый список, если вы хотите итератор пойти на reversed(a).

+0

ok gotcha. Я забыл, что имя и объект не совпадают в python. – grasshopper

0

Как указано @hcwhsa list.reverse, вы сделаете то, что изменит список. Если вы не хотите, чтобы сделать на месте, вы можете сделать следующее:

>>> l[::-1] 
[3, 2, 1] 
>>> l 
[1, 2, 3] 
0

Альтернативный способ получить список/строку/кортеж в обратном порядке является [:: - 1]. Это возвращает элементы a от последнего к первому, в качестве копии - без изменения a.

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