Почему список не преобразовывается в словарь?

Рейтинг: 0Ответов: 2Опубликовано: 09.08.2023
def inputtodict():
    a = []
    for i in input().split():
        a.append(tuple((str(i).split(":"))))
    dict(a)
    return a, type(a)

Ответы

▲ 1Принят

Код у вас почти работоспособный, нужно только присвоить возвращаемое 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'>)
▲ -1

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)