Я пытаюсь упростить модификацию массивных словарей, которые меняют номера по многим параметрам (от датестлингов до дат питона, десятичных чисел до плавающих и т. Д.), И я хочу иметь возможность определить, нужно ли что-то менять (возможно Я только хочу, чтобы изменить некоторые цифры, а не даты):Условные выражения в dict-решениях
def transform_dictionary(dictionary, callback, qualification_callback=None):
if qualification_callback:
dictionary.update({k: callback(v) for k, v in dictionary.items() if qualification_callback(v) else k: v})
else:
dictionary.update({k: callback(v) for k, v in dictionary.items()})
return dictionary
d = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5}
def bigger_than_two(number):
return number > 2
def double_it(number):
return number * 2
transform_dictionary(d, double_it, bigger_than_two)
# expecting {'one': 1, 'two': 2, 'three': 6, 'four': 8, 'five': 10}
transform_dictionary(d, double_it)
# expecting {'one': 2, 'two': 4, 'three': 6, 'four': 8, 'five': 10}
Я читаю о Словаре постижениях, но не вижу способ сделать то, что я хочу, либо сделать мое вычисление или оставить значение без изменений. Есть ли способ получить результаты, которые я хочу из вышеперечисленного?
По какой-либо причине это должно быть понимание словаря? – pzp
Вы делаете довольно распространенную ошибку при смешивании 'if whatever' в выражении фильтра понимания и' if whatever' в условном выражении 'x, если что-либо еще y'. То, что вы пытаетесь написать, является условным выражением, но поскольку синтаксис фильтра, специфичный для понимания, похож на одно и то же, вы пытаетесь поставить 'if whatever', куда будет идти фильтр. – user2357112
Я просто подумал, что понимание будет проще всего. Я хочу иметь возможность преобразовывать значения dict, которые соответствуют критериям для огромных dicts – codyc4321