如何使用 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)
我有一个遍历 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)