Python字典Pop

2024-05-15 00:05:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我下面的代码打开一个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)

下面是一个输入示例:

^{pr2}$

下面是我想要的输出:

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

因此,由于第一行中找到了“City”,所以具有56794帐号的两行都将被删除。在


Tags: csv实例key字符串代码incity列表
1条回答
网友
1楼 · 发布于 2024-05-15 00:05:39

如果我没听错的话,如果一个键的任何一行在第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]])

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

相关问题 更多 >

    热门问题