我正在编写一个脚本,我需要按照以下格式扫描列表
[jobname,username,permissions]
之后我需要设置一个字典,以下面的格式提供信息
jobname -> [username ] - [perm1,perm2]
这里的权限可以是读/写等权限。因此,对于单个作业,可以存在多个用户并且可以具有不同的权限。
目前我正在使用如下的setdefault:
def mapData(self):
"""
Create a dictionary from the list of jobs information
gathered in parser
"""
self.fDict={}
for jobName,uname,perms in self.TestArray:
#print jobName
#Need a way to add multiple perms
#The program for now only adds the last perm value as expected
self.fDict.setdefault(jobName,{})[uname]=perms
'''
DEBUG
'''
#for k,v in self.fDict.items():
#print 'Key->>'+str(k)+'->>>>>>>>>>>>>>>>>>'+str(v)
正如评论中所提到的,我只能添加最后一个不需要的烫发值。我还需要像list.append(perms)这样的值,但是无法解决这个问题。请指导。
答案 0 :(得分:3)
这里有 2级;包含包含列表的词典的字典。添加另一个setdefault()
电话:
self.fDict.setdefault(jobName, {}).setdefault(uname, []).append(perms)
现在fDict
包含jobName
上键入的词典,其中包含词典的词典包含perm
值列表,uname
。
演示:
>>> test_list = [['foo_job', 'bar_user', 'baz_permission'], ['foo_job', 'bar_user', 'spam_permission']]
>>> fDict = {}
>>> for jobName, uname, perms in test_list:
... fDict.setdefault(jobName, {}).setdefault(uname, []).append(perms)
...
>>> fDict
{'foo_job': {'bar_user': ['baz_permission', 'spam_permission']}}