Добавление 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])