python - 将列表中的重复项转换为唯一项
问题描述
我在列表中有以下重复项目列表:
x = ['John', "Jill", "Ron", "John", "Jill", "John", "Tom", "Harry", "Harry"]
我想得到以下输出:
out = ['John_1', "Jill_1", "Ron_1", "John_2", "Jill_2", "John_3", "Tom_1", "Harry_1", "Harry_2"]
我写了以下代码:
from collections import Counter
def iterate_string_duplicates(x):
nl = []
dct = dict(Counter(x))
for k,v in dct.items():
for i in list(range(1,v+1)):
nl.append(k+"_"+str(i))
return nl
但是由于使用了字典方法,我得到了以下输出:
iterate_string_duplicates(x)
output: ['John_1', 'John_2', 'John_3', 'Jill_1', 'Jill_2', 'Ron_1', 'Tom_1', 'Harry_1', 'Harry_2']
我正在寻找一种初始字符串的顺序不会改变的方法。
解决方案
您可以使用的列表理解想法是将计数器与每个名称相关联。然后它只需要一次通过迭代。
>>> from collections import defaultdict
>>> from itertools import count
>>> suffix = defaultdict(lambda: count(1))
>>> x = ['John', "Jill", "Ron", "John", "Jill", "John", "Tom", "Harry", "Harry"]
>>> [f"{name}_{next(suffix[name])}" for name in x]
['John_1',
'Jill_1',
'Ron_1',
'John_2',
'Jill_2',
'John_3',
'Tom_1',
'Harry_1',
'Harry_2']
推荐阅读
- kubernetes - 无法使用 google terraform GKE 模块在 GKE 集群上创建 Windows 节点池
- c# - 在 c# 中使用依赖注入的 RabbitMQ 工作队列
- sql - 当条件存在时查询一组数据与另一组数据
- php - PDO 语句更新 0 值而不是 null 或空
- oracle - 如何向新创建的 LISTENER 注册可插拔数据库(PDB)
- python - 通过列中的相互元素计算行时间差和连接
- spring-boot - Webclient 在 Docker 中泄漏内存?
- mysql - 如何在 MySQL 中汇总表以获得基于几列的 3 个月平均收入?
- javascript - JQuery 悬停选择器适用于 Chrome 开发工具,但不适用于代码
- node.js - 在 Nodejs 中的 Azure AD 中创建 AD 安全组