如何使用for循环在列表中最后添加的项目追加和添加项目

时间:2020-04-16 18:47:47

标签: python-3.x list dictionary for-loop csvreader

我有一个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'])}

1 个答案:

答案 0 :(得分:1)

您可以使用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)