Почему список не преобразовывается в словарь?
def inputtodict():
a = []
for i in input().split():
a.append(tuple((str(i).split(":"))))
dict(a)
return a, type(a)
def inputtodict():
a = []
for i in input().split():
a.append(tuple((str(i).split(":"))))
dict(a)
return a, type(a)
Код у вас почти работоспособный, нужно только присвоить возвращаемое dict(a)
значение переменной а
. Параметр для dict()
вполне подходящий - это список кортежей, что соответствует документации:
The dict() constructor builds dictionaries directly from sequences of key-value pairs
В то же время в вашем коде есть избыточное преобразование str(i)
, поскольку i
- и так строка, и есть избыточные скобки.
Если говорить о лаконичности кода и исключении промежуточного списка, то можно использовать генераторное выражение, которое сгенерирует последовательность кортежей для dict()
:
def inputtodict():
a = dict(tuple(i.split(":")) for i in input('Введите пары ключ:значение, разделяя пробелом: ').split())
return a, type(a)
print(inputtodict())
Введите пары ключ:значение, разделяя пробелом: 123:456 789:aaa ключ:значение
({'123': '456', '789': 'aaa', 'ключ': 'значение'}, <class 'dict'>)
dict возвращает словарь, а не заменяет содержимое параметра
Это могло бы выглядеть примерно так:
a = dict(a)
Но это все равно вызовет ошибку, тк для dict требуется 2 параметра
Если вы хотите преобразовать list в dict используйте подобную функцию:
def convert(lst):
res_dict = {}
for i in range(0, len(lst), 2):
res_dict[lst[i]] = lst[i + 1]
return res_dict
Все же, для вашей задачи я рекомендую сделать такой метод, чтобы не преобразовывать list в dict:
def inputtodict():
a = {}
counter = 0
for i in input().split():
a[counter] = (tuple((str(i).split(":"))))
counter = counter + 1
return a, type(a)