setdefault - 为密钥添加多个值

时间:2014-05-07 10:36:30

标签: python python-2.7 dictionary

我正在编写一个脚本,我需要按照以下格式扫描列表

[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)这样的值,但是无法解决这个问题。请指导。

1 个答案:

答案 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']}}