Элементы Python во вложенных списках со словарем - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть проект, который требует, чтобы я прочитал лист Excel с openpyxl. В рабочей таблице мне нужно найти несколько столбцов с одинаковыми именами, прочитать данные в каждом столбце и сравнить значения в каждой строке, сохранив только строки с одинаковыми значениями и сохранив пробел в других строках.

Я не знаю, сколько столбцов будет соответствовать входной строке, которую вводит пользователь, и я не знаю, сколько строк будет в электронной таблице, поэтому я создал словарь с заголовками столбцов. в качестве ключей и значений столбцов в виде списков.

Как сравнить строки за строкой, чтобы узнать, совпадают ли значения в каждом списке?

Вот код, который у меня есть:

for row in range(1, num_rows):
        for cell in range(1, num_cols):
            header_row = str(work_sheet.cell(1, cell).value)
            cell_val = work_sheet.cell(row, cell).value
            cell_list.append(cell_val)
            if header_row in col_dict:
                col_dict[header_row].append(cell_val)
            else:
                col_dict[header_row] = [cell_val]

Это дает мне словарь примерно так:

{
    'Col B': ['Col B', 'x', 'x', None, 'x', 'x', 'x'], 
    'Col C': ['Col C', 'x', 'x', 'None', 'x', 'None', 'None'],
    'Col A': ['Col A', 'x', 'x', 'None', 'x', 'None', 'x']
}

Я хочу сравнить элементы по соответствующим индексам в каждом списке (если ColB[1]=='x' и ColA[1]=='x' и ColC[1]=='x', введите 'x' в output_list. Иначе, добавьте "" в этот индекс список вывода. Я могу видеть списки, но как мне сравнить элементы в них?

for key in col_dict.keys():
        for i in range(len(col_dict[key])):
            print(col_dict[key][i])

1 Ответ

0 голосов
/ 09 января 2019

Я в конце концов выяснил ответ: я создал новый список, а затем перебрал все столбцы. Если значение в столбце соответствует «x», я записываю «x» в новый список. Если значение не совпадало с «x», или если значение в новом списке было «None», я помещал «None» в новый dict. Предложение else обрабатывает первые, копирует первый список в словаре в новый список, так что остальные записи словаря сравниваются с новым списком. Вот решение:

                            if cell_val is None:
                                cell_val = ''
                            new_list.append(cell_val)
                            if column_name in new_list:
                                new_list[column_name].append(cell_val)
                            else:
                                new_list[column_name] = [cell_val]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...