Python dict理解中的条件句

Python dict理解中的条件句,python,python-3.x,dictionary,dictionary-comprehension,Python,Python 3.x,Dictionary,Dictionary Comprehension,我正在尝试简化修改大量数字字典的过程(从日期字符串到python日期,从十进制到浮点等),并且我希望能够确定某些内容是否需要更改(可能我只想更改一些数字,而不是日期): 我正在阅读有关dict理解的文章,但没有找到一种方法来做我想做的事情,要么做我的计算,要么保持值不变。有没有办法从上面得到我想要的结果?像这样的理解可以满足你的需要 def transform_dictionary(dictionary, callback, qualification_callback=None):

我正在尝试简化修改大量数字字典的过程(从日期字符串到python日期,从十进制到浮点等),并且我希望能够确定某些内容是否需要更改(可能我只想更改一些数字,而不是日期):


我正在阅读有关dict理解的文章,但没有找到一种方法来做我想做的事情,要么做我的计算,要么保持值不变。有没有办法从上面得到我想要的结果?

像这样的理解可以满足你的需要

def transform_dictionary(dictionary, callback, qualification_callback=None):
        return {k: callback(v) if (qualification_callback and qualification_callback(v)) or not qualification_callback else v for k, v in dictionary.items()}

像这样的理解可以满足你的需求

def transform_dictionary(dictionary, callback, qualification_callback=None):
        return {k: callback(v) if (qualification_callback and qualification_callback(v)) or not qualification_callback else v for k, v in dictionary.items()}

带条件的词典理解采用以下结构:

new_dict = {key:VALUE_1 if CONDITION_1
            else VALUE_2 if CONDITION_2
            else VALUE_3 for key in myDict.keys()}
下面是一个简单的示例,希望您能看到它是如何工作的,并将其修改为 适合你的特殊应用

myDict = {"a": 4, "b": 7, "c": 55, "d": 432}
new_dict = {key:"greater than 100" if (myDict[key] > 100)
            else "10 to 100" if myDict[key] > 10
            else "10 or less" for key in myDict.keys()}

带条件的词典理解采用以下结构:

new_dict = {key:VALUE_1 if CONDITION_1
            else VALUE_2 if CONDITION_2
            else VALUE_3 for key in myDict.keys()}
下面是一个简单的示例,希望您能看到它是如何工作的,并将其修改为 适合你的特殊应用

myDict = {"a": 4, "b": 7, "c": 55, "d": 432}
new_dict = {key:"greater than 100" if (myDict[key] > 100)
            else "10 to 100" if myDict[key] > 10
            else "10 or less" for key in myDict.keys()}


有什么原因需要词典理解吗?你犯了一个相当常见的错误,就是把理解的过滤子句中的
if where
和条件表达式中的
if where
混为一谈
x if where y
。您试图编写的是一个条件表达式,但由于特定于理解的筛选器语法看起来是一样的,因此您试图将
放在筛选器的位置。我只是认为理解将是最简单的。我想能够转换符合大型dict标准的dict值,你只有double_it和大于double的dict值,或者你可能有更多的dict值?我会确切地知道我想做什么,为什么在这种情况下,像将所有十进制类转换为4位浮点,将所有“2015-03-15”字符串转换为日期,还有什么原因需要词典理解吗?你犯了一个相当常见的错误,就是把理解的过滤子句中的
if whater
和条件表达式中的
if whater
混为一谈
x if whates y
。您试图编写的是一个条件表达式,但由于特定于理解的筛选器语法看起来是一样的,因此您试图将
放在筛选器的位置。我只是认为理解将是最简单的。我想能够转换符合大型dict标准的dict值,你只有double_it和大于double的dict值,或者你可能有更多的dict值?我会确切地知道我想做什么,为什么在这种情况下,像将所有十进制类转换为4位浮点,将所有“2015-03-15”字符串转换为日期,从
k:
for
循环的etcso指的是如何处理该值,
v
?正确,这是选择使用哪个值的逻辑我不知道是感谢你还是python,这是干净的。感谢您还可以在这些理解中选择多个可能的键?如果省略
qualification\u回调
参数,则不会给出OPs预期的输出。你的字典理解应该是
{k:callback(v),如果限定和限定回调(v)或不限定回调,则在dictionary.items()}
中对k,v进行限定。因此从
k:
for
循环指的是如何处理该值,
v
?正确,这就是选择使用哪个值的逻辑我不知道是感谢你还是python,这很清楚。感谢您还可以在这些理解中选择多个可能的键?如果省略
qualification\u回调
参数,则不会给出OPs预期的输出。您的词典理解应该是
{k:callback(v),如果限定\u callback和限定\u callback(v),或者不限定\u callback,否则v代表dictionary.items()中的k,v