我有一个词典列表:
List = [ {hostname: server1, username: john}
{hostname: server2, username: jack}
{hostname: server2, username: jonny}
{hostname: server3, username: jules}
{hostname: server1, username: jonny}
{hostname: server1, username: jeff} ]
所以现在我想要每个主机名只有一个字典,如果每个主机名有几个条目,我想根据首选用户列表删除它们等等...... 例如,如果有一个用户john,jonny,jeff的server1,那么我想用john保存dict并删除其他的,如果没有john,那么保留一个jonny,依此类推,如果没有来自我的列表更喜欢然后我不在乎,只是删除其他人并留在一个。所以最后上面的例子看起来像这样
List = [ {hostname: server1, username: john}
{hostname: server2, username: jonny}
{hostname: server3, username: jules} ]
编辑:作为对评论的回应: 我甚至不知道该怎么做。
我的测试代码目前看起来像这样:
#!/usr/bin/env python
UserPref = ['john', 'jonny', 'jack']
List = [{'hostname': 'server1', 'username': 'john'},
{'hostname': 'server2', 'username': 'jack'},
{'hostname': 'server2', 'username': 'jonny'},
{'hostname': 'server3', 'username': 'jules'},
{'hostname': 'server1', 'username': 'jonny'},
{'hostname': 'server1', 'username': 'jeff'}]
for item in List:
if item.get('hostname') in List and item.get('username') not in UserPref:
del item
print List
答案 0 :(得分:1)
按用户名首选项对它们进行排序,然后通过列表,只有在没有匹配的服务器名称时才添加到新列表。
答案 1 :(得分:1)
正如@vogomatix所解释的,以下Python脚本应该满足您的需求:
user_list = [
{'hostname': 'server1', 'username': 'john'},
{'hostname': 'server2', 'username': 'jack'},
{'hostname': 'server2', 'username': 'jonny'},
{'hostname': 'server3', 'username': 'jules'},
{'hostname': 'server1', 'username': 'jonny'},
{'hostname': 'server1', 'username': 'jeff'}]
def sort_by_preferred_users(key):
preferred_users = ['john', 'jonny', 'jeff']
username = key['username']
return preferred_users.index(username) if username in preferred_users else len(preferred_users)
user_list.sort(key=sort_by_preferred_users)
new_user_list = []
server_list = []
for d in user_list:
hostname = d['hostname']
if hostname not in server_list:
new_user_list.append(d)
server_list.append(hostname)
print d
它打印出以下输出,并为您提供new_user_list
:
{'username': 'john', 'hostname': 'server1'}
{'username': 'jonny', 'hostname': 'server2'}
{'username': 'jules', 'hostname': 'server3'}
使用Python 2.7.6进行测试