Для обработки возможности int
, float
и пустых строковых значений я бы использовал комбинацию из списка, словаря и условных выражений, как показано:
dicts = [{'a': '1' , 'b': '' , 'c': '3.14159'},
{'d': '4' , 'e': '5' , 'f': '6'}]
print [{k: int(v) if v and '.' not in v else float(v) if v else None
for k, v in d.iteritems()}
for d in dicts]
# [{'a': 1, 'c': 3.14159, 'b': None}, {'e': 5, 'd': 4, 'f': 6}]
Однако, словарные понимания не были добавлены в Python 2 до версии 2.7.В более ранних версиях это все еще можно сделать как одно выражение, но его нужно записать с помощью конструктора dict
, например:
# for pre-Python 2.7
print [dict([k, int(v) if v and '.' not in v else float(v) if v else None]
for k, v in d.iteritems())
for d in dicts]
# [{'a': 1, 'c': 3.14159, 'b': None}, {'e': 5, 'd': 4, 'f': 6}]
Обратите внимание, что в любом случае вместо этого создается новый словарь списковмодификации исходного на месте (что должно было бы быть сделано по-другому).