我是Python的新手,我目前对此问题感到困惑:
我有一个由csv.DictReader
生成的词典列表。我已使用以下函数创建了列表:
def csvToDictList(filename):
reader = csv.DictReader(open(filename, 'rb'))
list = []
for row in reader:
list.append(row)
return (list, reader.fieldnames)
这很好用,但我处理的CSV文件有重复的列,所以我最终得到了一个字典:
[
{'Column1': 'Value1', 'Column2': 'Value2', ... <some unique columns and values> ..., 'Column1': 'Value1', 'Column2': 'Value2'},
...
{'Column1': 'Value1N', 'Column2': 'Value2N', ... <some unique columns and values> ..., 'Column1': 'Value1N', 'Column2': 'Value2N'}
]
我的主要问题是如何从此词典列表中删除重复列?
我想迭代每个键,然后在检测到重复的键名时删除列,如下所示:
def removeColumn(dictList, colName):
for row in dictList:
del row[colName]
但是,这不会删除两列吗?我应该在字典的哈希键上操作吗?任何帮助表示赞赏!
编辑:我看到的副本实际上存在于reader.fieldnames
列表中。所以,我假设字典也包含这些列,这是一个不正确的假设。
答案 0 :(得分:2)
字典中没有像重复键那样的东西。
如果你有更多具有相同名称的列,DictReader将只采用最后一列(覆盖以前的列)。
对于以下CSV文件:
a,b,c,a,b
1,2,3,4,5
6,7,8,9,10
DictReader将返回以下词语:
{'a': '4', 'c': '3', 'b': '5'}
{'a': '9', 'c': '8', 'b': '10'}
因此抛弃a
和b
列之前的值。