【问题标题】:using dict comprehension if/else logic to determine using a function or not使用 dict 理解 if/else 逻辑来确定是否使用函数
【发布时间】:2016-05-02 06:42:09
【问题描述】:

我有一个损坏的函数,它应该通过一个函数来拧紧所有项目,或者只运行从限定函数传递 True 的项目(如果给出了限定函数)

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

它被破坏了,因为它需要第二个函数来转换。我现在有

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

这很丑但有效。我可以在一行中执行此操作,要么通过回调运行所有值,要么首先在第二个回调中检查真实性,然后只运行通过的东西?谢谢

【问题讨论】:

    标签: python dictionary-comprehension


    【解决方案1】:

    v 仅在存在限定回调时返回,并且对于给定值返回 False,因此我们可以检查此条件,如果两个条件都成立则返回 v,否则返回 callback(v)。

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

    【讨论】:

    • 我想你想要{k : v if ...}
    【解决方案2】:

    您可以使用常量函数作为默认值,而不是 None:

    def transform_dictionary(dictionary, callback, qc=lambda x: True):
        return {k: callback(v) if qc(v) else v for k, v in dictionary.items()}
    

    【讨论】:

    • 哦,所以 qc 总是返回 true,它总是运行,但默认情况下它只是被忽略。非常蟒蛇,ty
    猜你喜欢
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2011-10-02
    • 2011-03-17
    • 1970-01-01
    • 2017-04-26
    • 2011-03-13
    • 2021-02-10
    相关资源
    最近更新 更多