我有这本字典:
dict = {
'user_1': {'role': 1, 'perm': 5},
'user_2': {'role': 1, 'perm': 5},
'user_3': {'role': 1, 'perm': 4},
'user_4': {'role': 1, 'perm': 7},
'user_5': {'role': 3, 'perm': 5}
}
我该如何过滤以仅选择带有以下内容的键:
重复的角色和权限:
repeated_role_perm = {
'user_1': {'role': 1, 'perm': 5},
'user_2': {'role': 1, 'perm': 5},
}
角色重复但没有重复权限:
only_role_repeated = {
'user_3': {'role': 1, 'perm': 4},
'user_4': {'role': 1, 'perm': 7},
}
剩菜剩饭:
leftovers = {
'user_5': {'role': 3, 'perm': 5}
}
我能够使用代码来缩短数据:
shorted_dict = OrderedDict(sorted(list.items(), key=lambda x: (operator.getitem(x[1], 'role'), operator.getitem(x[1], 'perm'))))
但这不是我想要的。
也许尝试一个功能?
my_dict = {
'user_1': {'role': 1, 'perm': 5},
'user_2': {'role': 1, 'perm': 5},
'user_3': {'role': 1, 'perm': 4},
'user_4': {'role': 1, 'perm': 7},
'user_5': {'role': 3, 'perm': 5}
}
def filter_dict(role,perm,dic):
filtered = {}
users = [k for k in dic.keys() if dic[k]['role'] == int(role) and
dic[k]['perm'] == int(perm)]
for user in users:
filtered[user] = dic[user]
return filtered
该函数返回,
filter_dict(1,5,my_dict)
{'user_1': {'role': 1, 'perm': 5}, 'user_2': {'role': 1, 'perm': 5}}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句