通过在末尾附加渐进数字来重命名词典列表中的重复项

Rename duplicates in list of dictionaries by appending progressive numbers at end

给出这样的字典列表

a_list = [{'name':'jennifer','roll_no':22}, {'name':'kristina','roll_no':26},
{'name':'jennifer','roll_no':18}, {'name':'kristina','roll_no':33}]

这个怎么改名为

a_list = [{'name':'jennifer','roll_no':22}, {'name':'kristina','roll_no':26},
{'name':'jennifer 1','roll_no':18}, {'name':'kristina 1','roll_no':33}]

您想构建一个新的词典列表,但每当添加一个具有 'name' 值的新词典时,您想要使用下一个可用选项。

有不同的方法,但一种是:

  • 遍历a_list中的所有词典并将它们添加到新列表
  • 在添加之前,检查一些使用过的名字的寄存器,看看他们的名字是否在那里,如果没有,就添加它;如果是,获取并增加与之关联的数字并更新字典

所以,在代码中:

a_list = [
    {'name':'jennifer','roll_no':22}, {'name':'kristina','roll_no':26},
    {'name':'jennifer','roll_no':18}, {'name':'kristina','roll_no':33}
]

names = {}
result = []
for d in a_list:
    if (name := d['name']) not in names:
        names[name] = 0
    else:
        names[name] += 1
        d['name'] = f'{name} {names[name]}'
    result.append(d)

print(result)

结果:

[{'name': 'jennifer', 'roll_no': 22}, {'name': 'kristina', 'roll_no': 26}, {'name': 'jennifer 1', 'roll_no': 18}, {'name': 'kristina 1', 'roll_no': 33}]