Python 词典流行

Python Dictionary Pop

我下面的代码打开一个 csv 并将其放入字典中,其中的列是列表。有重复的键,不能改变。关键是帐号列,即行[1]。现在,如果在行 [8] 中找到 'CITY' 字符串,则该键和值将被删除。我该如何编写才能删除同一键(以及相应值)的所有其他实例?

with open('c:\file.csv', 'rb') as f: 
    reader = csv.reader(f)
    result = collections.defaultdict(list)
    for row in reader:
        key = row[1]
        result[key].append([row[0], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12]])

        if 'CITY' in row[8]:
            result.pop(key)

这是一个输入示例:

3929, 56794, 5555551212, August, IL, 62305, Steve, Johnson, City, Max, Folder, 22, 56
3929, 56794, 5555551212, August, IL, 62305, Steve, Johnson, None, Max, Folder, 22, 85
3929, 58586, 5555551212, August, IL, 62305, Steve, Johnson, None, Max, Folder, 22, 69

这是我想要的输出:

3929, 58586, 5555551212, August, IL, 62305, Steve, Johnson, None, Max, Folder, 22, 69

因此,由于在第一行中找到 "City",因此将删除带有 56794 帐号的两行。

如果我对你的理解是正确的,如果它的任何行在位置 8 中包含 "CITY",你希望删除一个键。在这种情况下,我认为你最好跟踪这些 "unwanted" 键分开,像这样:

with open('c:\file.csv', 'rb') as f: 
    reader = csv.reader(f)
    result = collections.defaultdict(list)
    unwantedKeys = set()
    for row in reader:
        key = row[1]
        if 'CITY' in row[8]:
            unwantedKeys.add(key)
            if key in result:
                result.pop(key)
        if key not in unwantedKeys:
            result[key].append([row[0], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12]])

我们的想法是维护您要排除的键的列表(或在本例中为一组)。如果遇到要排除的新键,请将其添加到集合中并删除匹配结果(如果有)。如果您遇到其键位于排除集中的行,则根本不将该行添加到结果中。