Создание и извлечение из многомерного словаря с Python при циклическом просмотре табличных данных? - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь создать следующую структуру: Том: {start_row: 1, end_row: 3}, Сэм: {start_row: 4, end_row: 5}, Майк: {start_row: 6, end_row: 8}

Данные, которые у меня есть в Excel, это Tom | A |Том | X |Том | Y |Сэм | г |..

Код, который я использую:

all_guys_list = {}
start_end_dict = {"start_row": 0, "end_row": 0}
for xl_row in range(2,xlworksheet.max_row+1):
    present_guy_name = xlworksheet.cell(row=xl_row,column=1).value
    if present_guy_name not in all_guys_list:
        all_guys_list[present_guy_name] = 0
        start_end_dict["start_row"]=xl_row
    else:
        start_end_dict["end_row"] = xl_row
        all_guys_list[present_guy_name]=start_end_dict
print(all_guys_list)

, вывод: {'TOM': {'start_row': 6, 'end_row': 8}, 'SAM':{'start_row': 6, 'end_row': 8}, 'MIKE': {'start_row': 6, 'end_row': 8}}

Таким образом, в конце каждого цикла присваивается start_end_dictна все ключи all_guy_list, что неправильно.В результате начальная и конечная строка значения Майка присваиваются всем ребятам.Как я могу это исправить?

Кроме того, я должен выбрать внешние ключи в цикле и перебрать от начала до конца строки для каждого парня и выбрать другие значения из Excel.Пожалуйста, помогите мне с этим.

1 Ответ

0 голосов
/ 01 октября 2018

Это происходит потому, что все элементы в all_guys_list - это те же самые start_end_dict, которые вы создали и постоянно изменяете.Вам следует сбросить (повторно инициализировать) start_end_dict внутри цикла:

all_guys_list = {}
for xl_row in range(2,xlworksheet.max_row+1):
    start_end_dict = {"start_row": 0, "end_row": 0}
    ...

Другой подход - копировать start_end_dict каждый раз, когда вы заканчиваете с текущим present_guy_name:

all_guys_list = {}
start_end_dict = {"start_row": 0, "end_row": 0}
for xl_row in range(2,xlworksheet.max_row+1):
    ...
        ...
        all_guys_list[present_guy_name] = start_end_dict.copy()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...