2016-08-03 1 views
0

У меня есть словарь, как это:Попытки преобразовать все значения в словаре в целое через словарь понимания

{1: 'rattle', 2: '204', 3: 'three', 4: 404, 5: '104', 6: 'pythonic'} 

И я хочу, чтобы преобразовать все значения в целое, где это возможно, через словарь понимания. Так что я хочу это:

{1: 'rattle', 2: 204, 3: 'three', 4: 404, 5: 104, 6: 'pythonic'} 

Я пробовал:

{i: int(m[i]) for i in m if type(m[i]) == str and m[i].isdigit()} 

, но она включает в себя только те значения, которые струна и могут быть преобразованы в целое число. Я также попытался положить все это в попытку поймать, но он не работает

Я знаю, что это можно сделать с помощью простого цикла, но есть ли другой способ?

ответ

2

Добавив if в конец вашего цикла, вы определяете фильтрацию, ограничивая вывод на пары с ключом, где это значение является строкой и состоит из цифр.

Используйте условное выражение вместо выражения; что, как вы держите все пар ключ-значение, но применяются только int() к значениям, где это имеет значение и включают в себя все остальное без изменений:

{k: int(v) if isinstance(v, str) and v.isdigit() else v for k, v in m.items()} 

Вместо того, чтобы перебирать m (и только получить ключи), я использовал dict.items() чтобы получить как ключ, так и соответствующее значение за один шаг.

1
{k: int(v) if str(v).isdigit() else v for k, v in m.items()} 

 Смежные вопросы

  • Нет связанных вопросов^_^