Преобразование списка строк в список строк и целых чисел

#python-3.x

#python-3.x

Вопрос:

У меня есть словарь списков, каждый список состоит из 3 элементов, я хочу преобразовать 2-й и 3-й элементы в целые числа из строк

 dict = {1:['string', '2', '3',],
        2:['string', '2', '3',],
        3:['string', '2', '3',],}
 

чтобы стать:

 dict = {1:['string', 2, 3,],
        2:['string', 2, 3,],
        3:['string', 2, 3,],}
 

Спасибо

Ответ №1:

Во-первых, не называйте свои словари dict , так как это зарезервированное ключевое слово, и вы не хотите его перезаписывать.

Переходим к вашему решению.

 d = {
    1: ['string', '23', '3'],
    2: ['string', '2', '3'],
    3: ['string', '2', '3'],
}


d2 = {
    k: [
        int(i) if i.isdigit() else i 
        for i in v
    ] 
    for k, v in d.items()
}
 

Даст вам вывод:

 {   
    1: ['string', '23', '3'], 
    2: ['string', '2', '3'], 
    3: ['string', '2', '3']
}
{
    1: ['string', 23, 3], 
    2: ['string', 2, 3], 
    3: ['string', 2, 3]
}
 

Комментарии:

1. Внимание : это решение также преобразует первый элемент списка в целое число, если он содержит только цифры! Это не было запрошено OP

Ответ №2:

Если в вашем словаре много элементов, вы можете не создавать второй словарь в памяти, а изменить существующий на месте:

 data = {
    1: ['string', '2', '3'],
    2: ['string', '2', '3'],
    3: ['string', '2', '3'],
}

for v in data.values():
    v.append(int(v.pop(1)))
    v.append(int(v.pop(1)))

print(data)
 

Вывод:

 {1: ['string', 2, 3], 2: ['string', 2, 3], 3: ['string', 2, 3]}