Python从字典列表提取唯一Name对应去重Hash的拼接字符串优化方法
优化实现方案
你原来的代码用列表存储Hash并查重,时间复杂度较高,优化后用set做去重(O(1)查重效率),配合列表推导式可以把核心逻辑压缩到2~3行,完全符合Python开发规范:
方案1(推荐,O(n)时间复杂度,效率最高)
不需要额外依赖,用Python内置字典方法实现:
def test_data(): return [ {"Name": "C1", "Hash": "H1"}, {"Name": "C1", "Hash": "H1"}, {"Name": "C2", "Hash": "H1"}, {"Name": "C2", "Hash": "H1"}, {"Name": "C2", "Hash": "H2"}, ] # 核心代码仅2行 items = {} for d in test_data(): items.setdefault(d["Name"], set()).add(d["Hash"]) final_list = [f"{name}:{','.join(hashes)}" for name, hashes in items.items()] print("\n".join(final_list))
Python 3.7+版本下,Hash的顺序和原始数据中首次出现的顺序完全一致,和你原有代码输出结果100%匹配。
方案2(单行推导式写法)
如果追求极端的代码简洁,可以用itertools.groupby实现一行生成结果,不过需要先排序,大数据量下效率低于方案1:
from itertools import groupby final_list = [f"{k}:{','.join({d['Hash'] for d in g})}" for k, g in groupby(sorted(test_data(), key=lambda x:x['Name']), key=lambda x:x['Name'])] print("\n".join(final_list))
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

