Python 我如何制作每一个“;“用户”;字典里有一把钥匙和所有的;“团体”;它们属于它';s值多少?

Python 我如何制作每一个“;“用户”;字典里有一把钥匙和所有的;“团体”;它们属于它';s值多少?,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我想要一个结果,使打印语句打印 {"admin" : ["local", "public", "administrator"], "user A" : ["local"], "user B" : ["public"]} 这就是我尝试过的: def groups_per_user(groups_dictionary): use

我想要一个结果,使打印语句打印

{"admin" : ["local", "public", "administrator"], 
"user A" : ["local"], 
"user B" : ["public"]}
这就是我尝试过的:

def groups_per_user(groups_dictionary):
    user_groups = {}
    for groups, users in groups_dictionary.items():
            for user in users:
                user_groups[user] = groups
                
    return(user_groups)
    
print(groups_per_user({"local":["admin", "user A"], "public":["admin", "user B"], "administrator": ["admin"]}))
输出

{'admin': 'administrator', 'user A': 'local', 'user B': 'public'}

只需修改
for
循环,如下所示:

for user in users:
    user_groups.setdefault(user, [])
    user_groups[user].append(groups)

这是一个不需要任何模块帮助的解决方案,但不简单但灵活,您可以在任何情况下使用它,无论您的数据有多大,代码仍然可以工作,并为您提供所需的输出

解决方案 输出 因此,让我简要介绍一下我的代码,首先确定数据中的
键(
data\u keys
)和
值(
data\u keys
),然后找到所有值的交集(
intersect
),以便动态获取
admin
),然后搜索索引(
index
)为了在
中删除它,每个值中都有一个admin,因此当您删除它们时,会有一个空的键列表并将其删除,然后为
管理员
为_admin
)创建字典,并为用户创建另一个
字典(
为_用户
)毕竟,将它们连接起来以得到最终的解决方案

而且,如果你有以下疯狂的输入,你会得到想要的输出

输入 输出
data = {"local":["admin", "user A"],
        "public":["admin", "user B"],
        "administrator": ["admin"]}

def groups_per_user(data):
    data_keys = [key for key in data.keys()]
    data_values = [value for value in data.values()]

    for inter in range(len(data)):
        intersect = set(data_values[inter]).intersection(set(data_values[inter]))

    indexes = [i.index(''.join(i for i in intersect)) for i in data_values]
    for i, v in enumerate(data_values):
        data_values[i].remove(v[indexes[i]])

    non_empty_list = [e for i in data_values if len(i) != 0 for e in i]
    for_admin = {''.join(i for i in intersect): data_keys}

    for_users = {}
    for users_keys, users in data.items():
        for i in range(len(non_empty_list)):
            if non_empty_list[i] in users:
                for_users[''.join(user for user in users)] =  users_keys

    res = {}
    for a, b in for_users.items():
        for c, d in for_admin.items():
            res[c] = d
            res[a] = [b]

    return res

print(groups_per_user(data))
{'admin': ['local', 'public', 'administrator'], 
'user A': ['local'],
'user B': ['public']}
data = {"local":["admin", "user A"],
        "current":["admin", "user C"],
        "public":["admin", "user B"],
        "private":["admin", "user B"],
        "administrator": ["admin"]}

{'admin': ['local', 'current', 'public', 'private', 'administrator'],
'user A': ['local'],
'user C': ['public'],
'user B': ['private']}