python - 带有字典的嵌套列表中的 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])
解决方案
我最终找到了答案:我创建了一个新列表,然后遍历每一列。如果列中的值与“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]
推荐阅读
- ruby-on-rails - Rails Mongodb 无法保存记录
- javascript - 拖放功能在带有nodejs(javascript)测试自动化框架的selenium webdriver中不起作用
- python - 命令行中的 python filename.py 不起作用
- api - 如何从 LinkedIn AIP 获取 access_token?
- azure-databricks - 使用 RasterIO 读取 GTiff 文件时出现 Databricks 错误
- objective-c - firebase电话身份验证失败ios
- kubernetes - Kubernetes etcdctl 在哪里?
- spring-boot - 升级到 2.2.4 后无法运行 Spring Boot 应用:方法不存在
- ios - 如何让 Swift Playgrounds 在 iPad 上无边界?
- spring-boot - 在 Spring Webflux 中传递 API / 保留后端标头