从字典列表中删除重复的键

时间:2011-10-25 14:52:55

标签: python list dictionary duplicate-removal

我是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列表中。所以,我假设字典也包含这些列,这是一个不正确的假设。

1 个答案:

答案 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'}

因此抛弃ab列之前的值。