2013-04-08 1 views
3

Так у меня есть:Подсписка словаря

a = [["Hello", "Bye"], ["Morning", "Night"], ["Cat", "Dog"]] 

И я хочу, чтобы преобразовать его в словарь.

Я попытался с помощью:

i = iter(a) 
b = dict(zip(a[0::2], a[1::2])) 

Но он дал мне ошибку: TypeError: unhashable type: 'list'

+2

Вы хотите '[ 'Hello', 'Bye'] 'быть ключ для' [ 'Утро', 'Night']'? Потому что это то, что ваш код пытается сделать, если бы не тот факт, что списки не могут быть ключами. –

+0

@MartijnPieters Возможно, OP пытается разбить список на ключи и значения, однако OP может подумать, что он может рассматривать его как список строк без учета подписок. Вот почему он попробовал '[0 :: 2]' и '[1 :: 2]' – jamylak

+0

@jamylak: я * думаю * Ответ Хайдро спот-на, но я просто уверен, что OP, возможно, не захотел для выполнения кода примера, если бы это было не для изменяемых ключей. В этом случае 'dict (zip (map (tuple, a [0 :: 2]), a [1 :: 2]))' будет делать то, что хочет OP. –

ответ

7

Просто:

>>> a = [["Hello", "Bye"], ["Morning", "Night"], ["Cat", "Dog"]] 
>>> dict(a) 
{'Cat': 'Dog', 'Hello': 'Bye', 'Morning': 'Night'} 

Я люблю простоту питона

Вы можете увидеть here для всех способы построения словаря:

To illustrate, the following examples all return a dictionary equal to {"one": 1, "two": 2, "three": 3} :

>>> a = dict(one=1, two=2, three=3) 
>>> b = {'one': 1, 'two': 2, 'three': 3} 
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3])) 
>>> d = dict([('two', 2), ('one', 1), ('three', 3)]) #<-Your case(Key/value pairs) 
>>> e = dict({'three': 3, 'one': 1, 'two': 2}) 
>>> a == b == c == d == e 
True 
+0

Самый короткий ответ за все время – jamylak

+0

@jamylak: D: D: D – TerryA

+1

@jamylak Привет, спасибо за добавление к моему ответу :). Очень признателен. – TerryA

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

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