Python 3中合并无重复JSON列表的HashMap等价实现方法
Python 3中合并用户权限数据源的实现方式
对应Java里的HashMap,Python中可以直接用**字典(dict)**来实现相同逻辑——利用字典键的唯一性避免重复用户,结合集合自动去重权限。
原始数据源
d1 = [ {"user": "jack", "role": ["Viewer", "Manager", "Admin"]}, {"user": "jim", "role": ["Manager", "Admin"]}, {"user": "jerry", "role": ["Admin"]}, {"user": "gill", "role": ["Viewer", "Manager", "Admin"]}, ] d2 = [ {"user": "gill", "role": ["Viewer", "Manager", "Admin"]}, {"user": "jack", "role": ["Viewer"]}, {"user": "jim", "role": ["Viewer"]}, {"user": "jenny", "role": ["Admin"]}, ]
基础实现方式
用普通字典遍历两个数据源,手动处理用户不存在的情况:
merged = {} # 处理第一个数据源 for item in d1: user = item["user"] roles = item["role"] if user not in merged: merged[user] = set() merged[user].update(roles) # 处理第二个数据源 for item in d2: user = item["user"] roles = item["role"] if user not in merged: merged[user] = set() merged[user].update(roles) # 转换为目标格式(集合转列表,可选排序) result = [{"user": user, "role": sorted(list(roles))} for user, roles in merged.items()] # 输出结果 for item in result: print(item)
简洁实现方式(用collections.defaultdict)
defaultdict可以自动为不存在的键初始化空集合,省去判断逻辑:
from collections import defaultdict merged = defaultdict(set) # 合并遍历两个数据源 for item in d1 + d2: merged[item["user"]].update(item["role"]) # 转换为目标格式 result = [{"user": u, "role": sorted(list(r))} for u, r in merged.items()]
结果说明
最终输出会自动去重用户,且每个用户的权限无重复:
{"user": "jack", "role": ["Admin", "Manager", "Viewer"]} {"user": "jim", "role": ["Admin", "Manager", "Viewer"]} {"user": "jerry", "role": ["Admin"]} {"user": "gill", "role": ["Admin", "Manager", "Viewer"]} {"user": "jenny", "role": ["Admin"]}
内容的提问来源于stack exchange,提问作者user2172398
相关产品推荐
相关产品推荐

