2014-12-26 2 views
1

Не путать с this question in Stackoverflow.Отображаемый список - список как словарь в python

У меня есть список под названием a = [2, 3, 4, 1]

У меня есть некоторые функции говорят FUNC(), которая выглядит следующим образом:

def func(a): 
    o = [] 
    n = len(a) 
    for i in range(n): 
     x=a[:] 
     x[i],x[(i+1)%n] = x[(i+1)%n],x[i] 
     o.append(x) 
    return o 

и FUNC (а) производит еще один список выглядит следующим образом:

[[3, 2, 4, 1], [2, 4, 3, 1], [2, 3, 1, 4], [1, 3, 4, 2]] 

Теперь я хочу отобразить список результатов в список, из которого он создан. Итак, как создать словарь в следующем формате:

a   : o 

key   : value1, value2........last value 

[2, 3, 4, 1] : [3, 2, 4, 1], [2, 4, 3, 1], [2, 3, 1, 4], [1, 3, 4, 2] 
+0

Разве вы не можете просто сделать следующее: '{кортеж (а): FUNC (а)}'? (Незначительная деталь: у вас не может быть «list» в качестве ключа, поэтому я превратил его в «tuple».) Реальный вопрос - почему вы этого хотите, поскольку все, что у вас есть, это словарь с одним элементом - вы имеют несколько значений 'a'? – Rufflewind

ответ

2

Ключи в словаре не могут быть изменчивыми. Вместо этого вы можете иметь кортеж. Это

(2, 3, 4, 1) : [3, 2, 4, 1], [2, 4, 3, 1], [2, 3, 1, 4], [1, 3, 4, 2] 

Это может быть сделано как

def func(a): 
    o = [] 
    n = len(a) 
    for i in range(n): 
     x=a[:] 
     x[i],x[(i+1)%n] = x[(i+1)%n],x[i] 
     o.append(x) 
    return {tuple(a):o} 

Например func([2,3,4,1]) теперь будет возвращать

{(2, 3, 4, 1): [[3, 2, 4, 1], [2, 4, 3, 1], [2, 3, 1, 4], [1, 3, 4, 2]]} 

Также обратите внимание: в соответствии с documentation:

только типы недопустимых значений а ключи значение, содержащие списков или словари или другие изменяемые тип, которые сравниваются по стоимостям, а не по идентификатору объекта, причина в том, что эффективной реализации словарей требует ключ хеша-значение остается постоянным

POST КОММЕНТАРИЙ EDIT

Вы можете получить доступ к ключам напрямую usin [] обозначение.

например:

l = [2,3,4,1] 
a = func(l) 
print (a[tuple(l)]) 

Это распечатывает список значений.

Или вы можете перебрать весь словарь

for i in a.items(): 
    for j in i: 
      print (j) 

Это напечатает

[3, 2, 4, 1] 
[2, 4, 3, 1] 
[2, 3, 1, 4] 
[1, 3, 4, 2] 
+0

Итак, как написать ключ сейчас? Ключевым в нашем случае является кортеж (o).? Banagalorean помогает bangalorean: D – Technopolice

+0

@Technopolice Теперь ключ является 'tuple (o)'. Что вы подразумеваете под * письмом к ключу *? –

+1

Я хочу извлечь ключ из только что созданного словаря. Итак, как его получить? Как и для ключа, значение в this_dictionary: print key ... вызовет ошибку – Technopolice

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