我有一个CSV文件,作为字典列表进行迭代(假设excel文件中的每一行都由一个单独的字典表示,该字典由一个列名和该列的值组成)
是否有任何方法可以遍历所有字典,搜索特定的键:值组合,如果找到,则删除整个字典?基本上,如果特定列==99999,则删除该行(字典)
这就是我所拥有的,我得到的“列表索引超出范围”错误似乎是 与这类事物相同
for i in range(len(csv_data)):
column_name = 'specific_column'
if csv_data[i][column_name] == '99999':
del csv_data[i]
else:
pass
问题是,一旦删除一个项,
csv_data
的长度就会改变,for
循环将迭代错误的次数。如果直接在csv_data
上迭代,则会出现另一个问题。在这种情况下,您不会得到异常,但循环会跳过一些值(实际上,您当前的循环也会,但由于异常,您不会注意到)您可以保存索引以删除对象,而不是立即删除对象,然后再删除:
或者,您可以迭代副本并从原始值中删除元素:
或者,您可以构建副本,避免复制与谓词不匹配的元素:
您可以使用列表理解来重建列表,而不是保留行:
这将创建一个新列表,替换旧列表,其中仅保留特定列未设置为
'99999'
的词典您得到了一个
IndexError
异常,因为您的循环没有考虑到列表正在变短;您正在从0循环到N
,但当您删除时,列表的最后一个索引将从N - 1
移动到N - 2
,以此类推此外,当
i
在索引中循环时,随着i
的增加,您会跳过行,但列表中的下一个元素会在删除前面的项目时向下移动相关问题 更多 >
编程相关推荐