1

我有一个 for 循环遍历 CSV 中的每一行,我创建了一个包含列表的字典,但该列表被覆盖,因为字典键重复了几次。如何在下一次循环迭代中总结或附加到第二(1)位置的列表中相同键的下一个值?

因为如果再次找到现有键,则附加值会被覆盖,因此键的值会一遍又一遍地被覆盖。

with open('RawPolicy.csv', newline='') as rulemaker:
    rmatcher = csv.reader(rulemaker, delimiter=" ")

    for i in rmatcher:
        dic[i[2]]=[i[0]],[i[1]]

CSV 中的字段是:

Sgrupo3 CSGrupo3 LLLLLLLL
Sgrupo4 CSGrupo4 LLLLLLLL

输出应该是这样的:

{'LLLLLLLL': (['Sgrupo3', 'Sgrupo4'], ['CSGrupo3', 'CSGrupo4'])}
4

1 回答 1

1

您可以使用dict.setdefault2 个子列表的元组来初始化每个新键,然后通过压缩子列表和当前记录中的值来迭代它们以附加到具有相应值的每个列表:

for *values, key in rmatcher:
    for lst, value in zip(dic.setdefault(key, ([], [])), values):
        lst.append(value)

演示:https ://repl.it/@blhsing/GratefulMountainousProperty

如果您的值和键不一定在前三列,您可以直接指定索引。以下代码假定索引 6 处的键和索引 0 和 1 处的值:

for row in rmatcher:
    for lst, value in zip(dic.setdefault(row[6], ([], [])), row[:2]):
        lst.append(value)
于 2020-04-16T19:16:15.307 回答