Python流行词典

Python流行词典,python,dictionary,Python,Dictionary,下面的代码打开一个csv,并将其放入一个字典中,其中列为列表。存在无法更改的重复密钥。键是第[1]行的“帐号”列。现在,如果在第[8]行中找到“CITY”字符串,则该键和值将被删除。我如何编写此代码,以便该键的所有其他实例(以及相应的值)也将被删除 with open('c:\\file.csv', 'rb') as f: reader = csv.reader(f) result = collections.defaultdict(list) for row in r

下面的代码打开一个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”时删除密钥。在这种情况下,我认为您最好单独跟踪这些“不需要的”键,例如:

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]])

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

没有“重复键”的字典。如果您不希望包含该特定行,为什么不在前面进行
If
测试,而不在CITY存在时进行追加?很抱歉,csv中的每一行都成为一个字典。然后,几个字典中的一些键是重复的。如果我早些时候做“If”测试,它只会删除包含“CITY”字符串的行。我需要去掉这一行,以及所有其他包含相同帐号的行。您的代码不会显示每一行都成为字典。它显示一个字典,每行中的一个元素用作键,所有具有该键的条目累积到一个列表中。您的代码确实会删除共享该键的所有项,但是如果以后有其他行使用该键,它们将不会被“删除”,因为在您删除它们时它们还不在那里。如果您能将样本数据包含在预期输出中,那将非常有帮助。谢谢您向我解释这一点。我把样本数据放上去了。