Список кортежей в словарь


112

Вот как я сейчас конвертирую список кортежей в словарь в Python:

l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}

Есть ли способ лучше? Похоже, что для этого должен быть однострочный.

Ответы:


179

Просто вызовите dict()список кортежей напрямую

>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}

1
Derp, я знал, что есть простой способ сделать это ... Исходя из Ruby здесь, пытаюсь изучить способ работы Python. Спасибо!
Sarah Vessels,

5
@chandresh Это делает работу в Python 3, поэтому не требуется обновление.
Sven Marnach

@SvenMarnach, вот мой вывод той же команды, которую вы написали выше, на терминале py 3.5. Traceback (последний вызов последним): файл «<ipython-input-313-7bb3559567ff>», строка 1, в <module> dict (my_list) TypeError: объект «Dictionary» не вызывается
CKM

4
@chandresh Это не имеет ничего общего с Python 3 - это потому, что у вас есть переменная с именем dict, которая затеняет встроенный Python с тем же именем. Вы никогда не должны этого делать.
Sven Marnach

@SvenMarnach О. Спасибо. Это сработало. На самом деле, я получил некоторый код из Интернета и попытался запустить его. Похоже, автор использовал dictимя переменной, откуда я получил ошибку. Еще раз спасибо.
CKM

23

dictКонструктор принимает входные данные точно так , как у вас есть (ключ / значение кортежей).

>>> l = [('a',1),('b',2)]
>>> d = dict(l)
>>> d
{'a': 1, 'b': 2}

Из документации :

Например, все они возвращают словарь, равный {"one": 1, "two": 2}:

dict(one=1, two=2)
dict({'one': 1, 'two': 2})
dict(zip(('one', 'two'), (1, 2)))
dict([['two', 2], ['one', 1]])

15

С dictпониманием:

h = {k:v for k,v in l}

4
приятно, потому что он позволяет вам выполнить форматирование ключа / значения перед добавлением его в dict
jfunk

7

Кажется, все здесь предполагают, что список кортежей имеет однозначное соответствие между ключом и значением (например, у него нет дублированных ключей для словаря). Поскольку это первый вопрос, который возникает при поиске по этой теме, я отправляю ответ для более общего случая, когда нам приходится иметь дело с дубликатами:

mylist = [(a,1),(a,2),(b,3)]    
result = {}
for i in mylist:  
   result.setdefault(i[0],[]).append(i[1])
print(result)
>>> result = {a:[1,2], b:[3]}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.