Python加速嵌套字典之间的迭代

2024-09-26 23:19:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我想问你一些建议,以加快我的代码。我知道您可以看到许多错误,但我需要您的知识和帮助,了解问题所在,以及如何改进此代码

背景-应用程序创建的内容:

  1. 使用OpenPyXL
  2. 打开excel文件,读取数据并将其放入嵌套字典: 2a。行的第一级 2b。项目的第二级 例如:

{1: '@5C\Qopen@', 2: '20386239', 3: '3000133215', 4: 'RA', 5: None, 6: 'Vendor2', 7: 'IM45', 8: '@FR\QNot due@', 9: None, 10: None, 11: 'E1', 12: 'DNS', 13: datetime.datetime(2019, 12, 27, 0, 0), 14: datetime.datetime(2019, 12, 26, 0, 0), 15: -21501, 16: 'GBP', 17: -21501, 18: 'GBP', 19: datetime.datetime(2019, 12, 26, 0, 0), 20: datetime.datetime(2020, 2, 9, 0, 0)}

{2: '@5C\Qopen@', 2: '20386239', 3: '3000133215', 4: 'RA', 5: None, 6: 'Vendor1', 7: 'IM45', 8: '@FR\QNot due@', 9: None, 10: None, 11: 'E1', 12: 'DNS', 13: datetime.datetime(2019, 12, 27, 0, 0), 14: datetime.datetime(2019, 12, 26, 0, 0), 15: -21501, 16: 'GBP', 17: -21501, 18: 'GBP', 19: datetime.datetime(2019, 12, 26, 0, 0), 20: datetime.datetime(2020, 2, 9, 0, 0)}

{3: '@5C\Qopen@', 2: '20386239', 3: '3000133215', 4: 'RA', 5: None, 6: 'Vendor1', 7: 'IM45', 8: '@FR\QNot due@', 9: None, 10: None, 11: 'E1', 12: 'DNS', 13: datetime.datetime(2019, 12, 27, 0, 0), 14: datetime.datetime(2019, 12, 26, 0, 0), 15: -21501, 16: 'EUR', 17: -21501, 18: 'GBP', 19: datetime.datetime(2019, 12, 26, 0, 0), 20: datetime.datetime(2020, 2, 9, 0, 0)}

  1. 脚本应查看整个数据-比较供应商&;货币,并查看特定供应商是否有不同的货币(例如,当供应商1没有100%的特定货币[GBP或其他]
  2. 当发生这种情况时-将文本“某物”放在同一行的“17”列中,其中使用不同的货币
  3. 主要是我的代码工作正常,但速度非常慢。我的意思是当我需要在同一时间文件中比较30000行时

你知道我怎样才能改进它吗? 多谢各位

next_row2 = 1
numerkolumny = 1
nastepny = 1
numer_vendora = 1
ilosc_gbp = 0
ilosc_inne = 0
linijkadanych = {}

lista_vendorow = {}

for zmienna2 in progressbar.progressbar(assets2, redirect_stdout=True):

    for iteracja in assets2:
        if assets2[zmienna2][6] not in lista_vendorow.values():

            if nastepny < len(assets2):
                if assets2[zmienna2][6] == assets2[nastepny+1][6]:
                    if assets2[nastepny+1][16] == "GBP": # JESLI ZNALAZLES GBP, POLICZ DO GBP
                        ilosc_gbp = ilosc_gbp + 1
                        nastepny = nastepny + 1
                    else:                               # JESLI ZNALAZLES INNA WALUTE, POLICZ DO INNEJWALUTY
                        ilosc_inne = ilosc_inne + 1
                        nastepny = nastepny + 1
                else:
                    nastepny = nastepny + 1

            if nastepny >= len(assets2): # JESLI PRZEITEROWALES PRZEZ WSZYSTKIE WIERSZE, OBLICZ WYNIK

                    suma_walut = ilosc_gbp + ilosc_inne # SUMUJ WSZYSTKIE WALUTY

                    # JESLI ZNAJDZIE ODCHYLELNIA - RAPORTUJ!
                    if (suma_walut != ilosc_gbp) and (suma_walut != ilosc_inne):

                        for waluty in assets2: # nr wiersza
                            for waluty2 in assets2[waluty]: # nr kolumny
                                if assets2[waluty][6] == assets2[zmienna2][6]:
                                    if ilosc_gbp > ilosc_inne:
                                        result_tab.cell(column=17, row=waluty+1, value="Waluta other than GBP. Check!").font = style_blad_bold
                                    else:
                                        result_tab.cell(column=17, row=waluty+1, value="Other currencies between GBP!. Check!").font = style_blad_bold

                    lista_vendorow[numer_vendora] = assets2[zmienna2][6]
                    ilosc_gbp = 0   # ZERUJ ZMIENNE, LICZYMY NOWEGO VENDORA
                    ilosc_inne = 0  # ZERUJ ZMIENNE, LICZYMY NOWEGO VENDORA
                    nastepny = 1    # ZERUJ ZMIENNE, LICZYMY NOWEGO VENDORA
                    numer_vendora = numer_vendora + 1

Tags: innonedatetimeif货币gbpnumerilosc

热门问题