【发布时间】:2019-04-21 15:45:42
【问题描述】:
我有字典列表:
test_users = [{'user': 'ADMIN0', 'privilege': 'ADMIN', 'auth_protocol': 'SHA_512'},
{'user': 'ADMIN1', 'privilege': 'ADMIN', 'auth_protocol': 'SHA_256'}, \
{'user': 'MONITOR12', 'privilege': 'MONITOR', 'auth_protocol': 'SHA_512'}, \
{'user': 'MONITOR13', 'privilege': 'MONITOR', 'auth_protocol': 'SHA_256'}]
并且想要创建一个包含“特权”和“auth_protocol”唯一值的字典的新列表。例如:
selected_users= [{'user': 'ADMIN0', 'privilege': 'ADMIN', 'auth_protocol': 'SHA_512'},
{'user': 'MONITOR13', 'privilege': 'MONITOR', 'auth_protocol': 'SHA_256'}, \
限制:
1.'特权'永远不能被复制,
2.(可选)“auth_protocol”只有在所有可能性都被使用时才能重复(在这种情况下,它可以是“SHA_256”或“SHA_512”中的“auth_protocol”的另一个特权)
我解决问题的尝试:
test_users_copy = test_users
selected_users = []
random_user = random.choice(test_users_copy)
# Add randomly chosen user to the list
selected_users.append(random_user)
test_users_copy.remove(random_user)
for test in selected_users:
selected_users += [user for user in test_users_copy if (user.get('privilege') not in test.get('privilege')) and (user.get('auth_protocol') not in test.get('auth_protocol'))]
【问题讨论】:
-
如果出现重复的
privilege或auth_protocol,您如何决定选择哪个字典 -
将所有元素添加到带有键
(privilege, auth_protocol)的中间字典,并将其values()转换为列表。 -
特权应该始终是唯一的(如果没有更多唯一的“特权”列表完成),但是“auth_protocol”的值应该尽可能多样化,所以我会检查 selected_users 中的当前值并在此基础上做出选择。
-
那么带有
ADMIN1和MONITOR12的字典会被删除吗?此外,您的文字描述没有多大意义,最好能提供具体的输出 -
代码将出现在函数中,每次它适用于所有创建的用户的副本。这样做的目的是获取随机用户及其参数(由 dicts 表示)最终输出将包含具有唯一权限的字典列表,因此列表中 dics 的总数将等于唯一权限。我之前发布了示例输出(selected_users)。添加后删除dict显然是因为无法再次使用相同的权限
标签: python list dictionary for-loop