带有字典的嵌套列表中的Python元素

时间:2018-11-07 18:51:09

标签: python excel dictionary openpyxl nested-lists

我有一个项目,要求我使用openpyxl阅读Excel工作表。在工作表中,我需要查找几列名称相似的列,读取每一列中的数据,并比较每一行的值,仅保留具有相同值的行,并在其他行中存储空白。

我不知道要匹配用户输入的输入字符串的列数,也不知道电子表格中要包含多少行,因此我创建了带有列标题的字典作为键,将列值作为列表。

如何逐行比较值以找出每个列表中的值是否匹配?

这是我拥有的代码:

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 :(得分:0)

我最终想出了答案:我创建了一个新列表,然后遍历每列。如果该列中的值与“ x”匹配,则将“ x”写入新列表。如果该值与“ x”不匹配,或者新列表中的值为“ None”,则在新字典中放置“ None”。 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]