【发布时间】:2016-04-28 10:46:09
【问题描述】:
我正在尝试简化修改大量更改数字的大量字典(从日期字符串到 python 日期,从十进制到浮点数等),并且我希望能够确定是否需要更改某些内容(也许我只想更改一些数字,而不是日期):
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}
我正在阅读有关 dict 理解的内容,但没有找到一种方法来做我想做的事,要么进行我的计算,要么保持值不变。有没有办法从上面得到我想要的结果?
【问题讨论】:
-
有什么理由需要字典理解吗?
-
您犯了一个相当常见的错误,即混淆了理解的过滤子句中的
if whatever和条件表达式x if whatever else y中的if whatever。您要编写的是条件表达式,但由于特定于理解的过滤器语法看起来是一样的,您试图将if whatever放在过滤器所在的位置。 -
我只是认为理解是最简单的。我希望能够转换符合大字典标准的字典值
-
你只有 double_it 和 big_than_two,还是有更多?
-
我会确切地知道我想做什么以及为什么在这种情况下,例如将所有 Decimal 类转换为 4 位浮点数,将所有“2015-03-15”字符串转换为日期等
标签: python python-3.x dictionary dictionary-comprehension