如何将字符串转换为无重复值的字典并按字母顺序排序字典值
Python 字符串转去重排序字典实现方案
我们需要完成两个核心处理逻辑:
- 将固定格式的多行字符串转换为字典结构,相同键对应的多个值自动去重
- 对字典每个键对应的列表值按英文字母顺序排序
给定的待处理字符串示例如下:
string = """Luke:sport\nDick:hike\nLisa:game\nLuke:craft\nDick:hike\nLuke:craft\nDick:craft"""
完整实现代码
from collections import defaultdict def process_string(input_str): # 第一步:转换为去重字典 res_dict = defaultdict(list) for line in input_str.strip().split('\n'): key, value = line.split(':') # 值不存在才添加,实现去重 if value not in res_dict[key]: res_dict[key].append(value) # 第二步:对每个值列表按字母顺序排序 for key in res_dict: res_dict[key] = sorted(res_dict[key]) return dict(res_dict) # 调用测试 if __name__ == "__main__": result = process_string(string) print(result)
运行上述代码后,输出结果和预期完全一致:
{'Luke': ['craft', 'sport'], 'Lisa': ['game'], 'Dick': ['craft', 'hike']}
无需导入依赖的原生实现
如果不想引入collections模块,也可以用Python原生字典实现:
def process_string_native(input_str): res_dict = {} for line in input_str.strip().split('\n'): key, value = line.split(':') if key not in res_dict: res_dict[key] = [] if value not in res_dict[key]: res_dict[key].append(value) # 排序逻辑 for key in res_dict: res_dict[key] = sorted(res_dict[key]) return res_dict
大数据量优化建议
如果待处理的字符串行数非常多,可先用集合暂存值提升去重效率,判断元素存在的时间复杂度从列表的O(n)降到O(1):
def process_string_high_perf(input_str): res_dict = {} for line in input_str.strip().split('\n'): key, value = line.split(':') if key not in res_dict: res_dict[key] = set() res_dict[key].add(value) # 转列表后排序 for key in res_dict: res_dict[key] = sorted(res_dict[key]) return res_dict
内容的提问来源于stack exchange,提问作者moll koll
相关产品推荐
相关产品推荐

