Ось як я зараз перетворюю список кортежів у словник на Python:
l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}
Чи є кращий спосіб? Здається, що для цього повинен бути один лайнер.
Ось як я зараз перетворюю список кортежів у словник на Python:
l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}
Чи є кращий спосіб? Здається, що для цього повинен бути один лайнер.
Відповіді:
Просто зателефонуйте dict()
до списку кортежів безпосередньо
>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}
dict
, затінюючи однойменну вбудовану програму Python. Ти ніколи цього не повинен робити.
dict
як ім'я змінної, звідки я отримав помилку. Знову дякую.
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]])
Здається, всі тут припускають, що список кортежів має один до одного зіставлення між ключем та значеннями (наприклад, у ньому немає дублюваних ключів для словника). Оскільки це перше запитання, яке з'являється в пошуку цієї теми, я публікую відповідь на більш загальний випадок, коли нам доводиться мати справу з дублікатами:
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]}