微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决需要帮助降低上述功能的复杂性或重复性

嗨,有人可以帮助我降低下面提到的代码的复杂性,因为我是新手,我需要它来减少代码量并改进代码并提高简单性并减少整体编码中的重复在这方面的帮助会很有帮助,并提前感谢您在这方面帮助我的时间和考虑。

class SynonymSerializer(serializers.ModelSerializer):
    class Meta:
        model = synonym
        fields = '__all__'

    
    def update(self,instance,validated_data):

        instance.insured_synonym = validated_data.get('insured_synonym',instance.insured_synonym)
        instance.obligor_borrower_counterparty_synonym = validated_data.get('obligor_borrower_counterparty_synonym',instance.obligor_borrower_counterparty_synonym)
        instance.guarantor_synonym = validated_data.get('guarantor_synonym',instance.guarantor_synonym)
        instance.credit_rating_synonym = validated_data.get('credit_rating_synonym',instance.credit_rating_synonym)
        instance.country_of_risk_synonym = validated_data.get('country_of_risk_synonym',instance.country_of_risk_synonym)
        instance.tenor_synonym = validated_data.get('tenor_synonym',instance.tenor_synonym)
        instance.coverage_synonym = validated_data.get('coverage_synonym',instance.coverage_synonym)
        instance.insured_transaction_synonym = validated_data.get('insured_transaction_synonym',instance.insured_transaction_synonym)
        instance.any_third_parties_synonym = validated_data.get('any_third_parties_synonym',instance.any_third_parties_synonym)
        instance.premium_rate_synonym = validated_data.get('premium_rate_synonym',instance.premium_rate_synonym)
        instance.margin_synonym = validated_data.get('margin_synonym',instance.margin_synonym)
        instance.utilization_expected_utilization_synonym = validated_data.get(
            'utilization_expected_utilization_synonym',instance.utilization_expected_utilization_synonym)
        instance.purpose_synonym = validated_data.get('purpose_synonym',instance.purpose_synonym)
        instance.retained_amount_synonym = validated_data.get('retained_amount_synonym',instance.retained_amount_synonym)
        instance.insured_percentage_synonym = validated_data.get('insured_percentage_synonym',instance.insured_percentage_synonym)
        instance.payment_terms_synonym = validated_data.get('payment_terms_synonym',instance.payment_terms_synonym)
        instance.secured_security_synonym = validated_data.get('secured_security_synonym',instance.secured_security_synonym)
        instance.waiting_period_synonym = validated_data.get('waiting_period_synonym',instance.waiting_period_synonym)
        instance.brokerage_synonym = validated_data.get('brokerage_synonym',instance.brokerage_synonym)
        instance.broker_synonym = validated_data.get('broker_synonym',instance.broker_synonym)
        instance.ipt_synonym = validated_data.get('ipt_synonym',instance.ipt_synonym)
        instance.enquiry_code_synonym = validated_data.get('enquiry_code_synonym',instance.enquiry_code_synonym)
        instance.law_synonym = validated_data.get('law_synonym',instance.law_synonym)
        instance.terms_of_repayment_synonym = validated_data.get('terms_of_repayment_synonym',instance.terms_of_repayment_synonym)
        instance.financials_limit_synonym = validated_data.get('financials_limit_synonym',instance.financials_limit_synonym)

        fields_25_synonym_key = [
            'insured_synonym','obligor_borrower_counterparty_synonym','guarantor_synonym','credit_rating_synonym','country_of_risk_synonym','tenor_synonym','coverage_synonym','insured_transaction_synonym','any_third_parties_synonym','premium_rate_synonym','margin_synonym','utilization_expected_utilization_synonym','purpose_synonym','retained_amount_synonym','insured_percentage_synonym','payment_terms_synonym','secured_security_synonym','waiting_period_synonym','brokerage_synonym','broker_synonym','ipt_synonym','enquiry_code_synonym','law_synonym','terms_of_repayment_synonym','financials_limit_synonym'
        ]

        dict_obj = temp_dict()

        # Logic to store data
        for index,key in enumerate(fields_25_synonym_key):
            dict_obj.add(key,validated_data.get(key))

        # path to where synonym excel sheet should be present

        path = "C:\\Users\\batman\\mycode\\dataingest\\data\\"

        # change directory to desired location,making sure we are at the correct location
        os.chdir(path)

        # code to delete existing excel sheet
        for file in os.listdir(path):
            print("file neme is :",file)

            # SynonymList.xlsx
            import pandas as pd
            if 'SynonymList.xlsx' in file:
                excel_path = path + file
                g = pd.read_excel(excel_path)
                excel_new_path = path + "\\SynonymList_old.xlsx"
                g.to_excel(excel_new_path,index=False)
                os.remove(file)
        # code to create new excel sheet on synonym table update

        try:

            tuple_list = []
            # create Workbook object
            wb = Workbook()
            # select demo.xlsx
            sheet = wb.active

            initial = dict_obj
            tuple_list.append(("s_field","s_synonym"))
            for key,value in initial.items():
                dict_values = initial[key]
                values_list = dict_values.split(",")
                for n in range(len(values_list)):
                    if key == "insured_synonym":
                        tuple_list.append(("insured",values_list[n].lower().strip()))
                    if key == "obligor_borrower_counterparty_synonym":
                        tuple_list.append(("obligor",values_list[n].lower().strip()))
                    if key == "guarantor_synonym":
                        tuple_list.append(("guarantor",values_list[n].lower().strip()))
                    if key == "credit_rating_synonym":
                        tuple_list.append(("credit rating",values_list[n].lower().strip()))
                    if key == "country_of_risk_synonym":
                        tuple_list.append(("obligor country",values_list[n].lower().strip()))
                    if key == "tenor_synonym":
                        tuple_list.append(("tenor",values_list[n].lower().strip()))
                    if key == "coverage_synonym":
                        tuple_list.append(("coverage",values_list[n].lower().strip()))
                    if key == "insured_transaction_synonym":
                        tuple_list.append(("insured transaction",values_list[n].lower().strip()))
                    if key == "any_third_parties_synonym":
                        tuple_list.append(("third parties",values_list[n].lower().strip()))
                    if key == "premium_rate_synonym":
                        tuple_list.append(("premium rate",values_list[n].lower().strip()))
                    if key == "margin_synonym":
                        tuple_list.append(("margin",values_list[n].lower().strip()))
                    if key == "utilization_expected_utilization_synonym":
                        tuple_list.append(("utilization",values_list[n].lower().strip()))
                    if key == "purpose_synonym":
                        tuple_list.append(("purpose",values_list[n].lower().strip()))
                    if key == "retained_amount_synonym":
                        tuple_list.append(("retained amount",values_list[n].lower().strip()))
                    if key == "insured_percentage_synonym":
                        tuple_list.append(("insured %",values_list[n].lower().strip()))
                    if key == "payment_terms_synonym":
                        tuple_list.append(("payment terms",values_list[n].lower().strip()))
                    if key == "secured_security_synonym":
                        tuple_list.append(("secured",values_list[n].lower().strip()))
                    if key == "waiting_period_synonym":
                        tuple_list.append(("waiting period",values_list[n].lower().strip()))
                    if key == "brokerage_synonym":
                        tuple_list.append(("brokerage",values_list[n].lower().strip()))
                    if key == "broker_synonym":
                        tuple_list.append(("broker",values_list[n].lower().strip()))
                    if key == "ipt_synonym":
                        tuple_list.append(("ipt",values_list[n].lower().strip()))
                    if key == "enquiry_code_synonym":
                        tuple_list.append(("enquiry code",values_list[n].lower().strip()))
                    if key == "law_synonym":
                        tuple_list.append(("law",values_list[n].lower().strip()))
                    if key == "terms_of_repayment_synonym":
                        tuple_list.append(("terms of repayment",values_list[n].lower().strip()))
                    if key == "financials_limit_synonym":
                        tuple_list.append(("limit",values_list[n].lower().strip()))
                    # if key == "ef_created":
                    #     tuple_list.append(("created at",values_list[n].lower().strip()))
                    # if key == "ef_last_updated":
                    #     tuple_list.append(("last update",values_list[n].lower().strip()))
            # append all rows
            for row in tuple_list:
                sheet.append(row)
            # save file
            wb.save(path + "\\SynonymList.xlsx")
            print("File saved at..",path)
        except Exception as e:
            print("Not able to create synonym excel sheet",e)

        instance.save()
        return instance

解决方法

  • 没有检查所有相关的代码行,但也许您可以使用 getattrsetattr 来减少信息重复
properties = [
    'insured_synonym','obligor_borrower_counterparty_synonym','guarantor_synonym','credit_rating_synonym',# and so on
]
for prop in properties:
    setattr(instance,prop,validated_data.get(prop,getattr(instance,prop)))
  • 您从不使用 index,因此您不需要 enumerate
for key in fields_25_synonym_key:
    dict_obj.add(key,validated_data.get(key))
  • 一个查找表来摆脱所有这些 ifs
  • 您可以直接遍历列表中的项目,因此不需要 nrangelen
labels = {
    "insured_synonym":                          "insured","obligor_borrower_counterparty_synonym":    "obligor","guarantor_synonym":                        "guarantor","credit_rating_synonym":                    "credit rating",# and so on
}
for val in values_list:
    tuple_list.append((labels[key],val.lower().strip()))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。