Добавление 2 списка внутри словаря

Я пытался добавить номер 2 списка в словаре. Дело в том, что мне нужно проверить, находится ли значение в выбранной строке и столбце уже в словаре, если это так, я хочу добавить список двойной записи к значению (еще один список двойной записи), уже существующему в словаре. Я использую электронную таблицу Excel + Xlrd, чтобы я мог прочитать ее. Я довольно новичок в этом.

Например, код проверяет учетную запись (число) в указанной строке и столбцах, скажем, значение равно 10, а затем, если его нет в словаре, он добавляет 2 значения, соответствующие этому количеству, скажем, [100, 0] как значение для этого ключа. Это работает как задумано.

Теперь самое сложное, когда номер счета уже находится в словаре. Допустим, это вторая запись для счета № 10. и это [50, 20]. Я хочу, чтобы значение, связанное с клавишей "10", было [150, 20].

Я пробовал метод zip, но, похоже, он возвращает результат radomn, иногда он складывается, иногда нет.

import xlrd
book = xlrd.open_workbook("Entry.xls")
print ("The number of worksheets is", book.nsheets)
print ("Worksheet name(s):", book.sheet_names())
sh = book.sheet_by_index(0)
print (sh.name,"Number of rows", sh.nrows,"Number of cols", sh.ncols)
liste_compte = {}
for rx in range(4, 10):
    if (sh.cell_value(rowx=rx, colx=4)) not in liste_compte:
        liste_compte[((sh.cell_value(rowx=rx, colx=4)))] = [sh.cell_value(rowx=rx, colx=6), sh.cell_value(rowx=rx, colx=7)]
    elif (sh.cell_value(rowx=rx, colx=4)) in liste_compte:
        three = [x + y for x, y in zip(liste_compte[sh.cell_value(rowx=rx, colx=4)],[sh.cell_value(rowx=rx, colx=6), sh.cell_value(rowx=rx, colx=7)])]
        liste_compte[(sh.cell_value(rowx=rx, colx=4))] = three
print (liste_compte)

1 ответ

Решение

Я не собираюсь прямо распутывать ваш код, а просто помогу вам с общим примером, который делает то, что вы хотите:

 def update_balance(existing_balance, new_balance):
     for column in range(len(existing_balance)):
         existing_balance[column] += new_balance[column]


 def update_account(accounts, account_number, new_balance):
     if account_number in accounts:
        update_balance(existing_balance = accounts[account_number], new_balance = new_balance)
     else:
        accounts[account_number] = new_balance

И, наконец, вы бы сделали что-то вроде (при условии, что ваш XLS выглядит [account_number, balance 1, balance 2]:

  accounts = dict()
  for row in xls:
      update_account(accounts       = accounts, 
                     account_number = row[0],
                     new_balance    = row[1:2])
Другие вопросы по тегам