You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:48:33