Python 需要帮助降低功能的复杂性或重复

Python 需要帮助降低功能的复杂性或重复,python,database,code-duplication,redundancy,data-integration,Python,Database,Code Duplication,Redundancy,Data Integration,您好,有人能帮我降低下面提到的代码的复杂性吗?因为我是新手,我需要它来减少代码量,改进代码,提高简单性,减少总体编码中的重复。这方面的任何帮助都会有很大的帮助,提前感谢您的时间和考虑在这方面帮助我 def update(self, instance, validated_data): instance.email_id = validated_data.get('email_id', instance.email_id) instance.email_ml_recommenda

您好,有人能帮我降低下面提到的代码的复杂性吗?因为我是新手,我需要它来减少代码量,改进代码,提高简单性,减少总体编码中的重复。这方面的任何帮助都会有很大的帮助,提前感谢您的时间和考虑在这方面帮助我

def update(self, instance, validated_data):

    instance.email_id = validated_data.get('email_id', instance.email_id)
    instance.email_ml_recommendation = validated_data.get('email_ml_recommendation',
                                                          instance.email_ml_recommendation)
    instance.ef_insured_name = validated_data.get('ef_insured_name', instance.ef_insured_name)
    instance.ef_broker_name = validated_data.get('ef_broker_name', instance.ef_broker_name)
    instance.ef_obligor_name = validated_data.get('ef_obligor_name', instance.ef_obligor_name)
    instance.ef_guarantor_third_party = validated_data.get('ef_guarantor_third_party',
                                                           instance.ef_guarantor_third_party)
    instance.ef_coverage = validated_data.get('ef_coverage', instance.ef_coverage)
    instance.ef_financials = validated_data.get('ef_financials', instance.ef_financials)
    instance.ef_commercial_brokerage = validated_data.get('ef_commercial_brokerage',
                                                          instance.ef_commercial_brokerage)
    # fixing bug of pipeline

    instance.ef_underwriter_decision = validated_data.get('ef_underwriter_decision',
                                                          instance.ef_underwriter_decision)
    instance.ef_decision_nty_fields = validated_data.get('ef_decision_nty_fields', 
                                                   instance.ef_decision_nty_fields)
    instance.ef_feedback = validated_data.get('ef_feedback', instance.ef_feedback)

    instance.relation_id = validated_data.get('relation_id', instance.relation_id)
    instance.email_outlook_date = validated_data.get('email_outlook_date', 
                                                           instance.email_outlook_date)
    instance.ef_decision_nty_fields = validated_data.get('ef_decision_nty_fields', 
                                                           instance.ef_decision_nty_fields)
    instance.ef_pl_est_premium_income = validated_data.get('ef_pl_est_premium_income',
                                                           instance.ef_pl_est_premium_income)
    instance.ef_pl_prob_closing = validated_data.get('ef_pl_prob_closing', 
                                                                       instance.ef_pl_prob_closing)
    instance.ef_pl_time_line = validated_data.get('ef_pl_time_line', instance.ef_pl_time_line)
    instance.ef_pipeline = validated_data.get('ef_pipeline', instance.ef_pipeline)
    instance.el_insured_margin = validated_data.get('el_insured_margin', instance.el_insured_margin)
    instance.ef_last_updated = validated_data.get('ef_last_updated', instance.ef_last_updated)
    instance.relation_id = validated_data.get('relation_id', instance.relation_id)
    # CR3.2 Primium and basis point addition
    instance.broker_email_id = validated_data.get('broker_email_id', instance.broker_email_id)
    instance.premium = validated_data.get('premium', instance.premium)
    instance.basis_points = validated_data.get('basis_points', instance.basis_points)
    instance.basis_points_decision = validated_data.get('basis_points_decision', 
                                                           instance.basis_points_decision)

    embedded_json = validated_data.get('email_embedd', instance.email_embedd)
    instance.email_embedd = json.dumps(embedded_json)

如果必须将字典
validated\u data
中在
instance
中具有相应属性的所有项复制到该实例,则迭代这些项并使用
setattr
设置
实例
对象的相应属性

您似乎有一种特殊情况,需要将值字符串化为JSON。因此,您需要特定的代码来处理该场景:

def update(self, instance, validated_data):
    for key, value in validated_data.items():
        if hasattr(instance, key):
            if key == "email_embedd":  # special case
                instance.email_embedd = json.dumps(value)
            else:
                setattr(instance, key, value) 
逻辑错误。。。 特殊情况下的代码中存在问题:

embedded_json = validated_data.get('email_embedd', instance.email_embedd)
instance.email_embedd = json.dumps(embedded_json)
如果在
validated\u data
没有键
email\u embedded
时执行此操作,则
embedded\u json
将默认为
instance.email\u embedded
。但是这个值已经是JSON编码的!因此,如果您现在继续执行
json.dumps(embedded_json)
,您将得到一个本身已再次字符串化的json字符串


上述建议的代码不会出现此问题。

谢谢您的回复,我将尝试此方法。不客气!当它回答你的问题时,别忘了,否则,让我知道什么需要改进。我能用这个函数代替我发布的吗?是的,这就是目的。在没有实际使用样本数据的情况下(验证的_数据作为其他键有什么?,
instance
有什么其他属性?),这是我能想到的最好方法。