首页 > 解决方案 > 带有字典的嵌套列表中的 Python 元素

问题描述

我有一个项目需要我用 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'and ColA[1]=='x'ColC[1]=='x'则放入'x'in output_list。否则,将 a""放入输出列表的该索引中。我可以看到列表,但是如何比较其中的元素?

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

标签: pythonexceldictionaryopenpyxlnested-lists

解决方案


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

推荐阅读