如何使用 for 循环将项目附加到列表中的最后一个附加项目

How to append and item to the last appended item in a list with a for loop

我有一个遍历 CSV 中每一行的 for 循环,我创建了一个包含列表的字典,但该列表被覆盖了,因为字典键重复了几次。如何在下一次循环迭代中总结或追加到第二个 (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'])}

您可以使用 dict.setdefault 用 2 个子列表的元组初始化每个新键,然后循环访问子列表和当前记录中的值,方法是将它们压缩以附加到每个对应值列表:

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)