setdefault向键添加多个值

2024-06-16 11:38:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

[jobname,username,permissions]

之后,我需要设置一个字典,将提供以下格式的信息

jobname -> [username ] - [perm1,perm2]

这里perm可以是读/写之类的权限等等,所以对于单个作业,可以存在多个用户,并且可以具有不同的权限。你知道吗

目前我使用的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)

正如在评论中提到的,我只能添加最后一个烫发值,这不是所需要的。我需要这样的东西列表.append(perms)的值部分,但无法解决此问题。请指点一下。你知道吗


Tags: theinself权限列表for格式username
1条回答
网友
1楼 · 发布于 2024-06-16 11:38:21

这里有两个级别;一个包含列表的字典。添加另一个setdefault()调用:

self.fDict.setdefault(jobName, {}).setdefault(uname, []).append(perms)

现在fDict包含键控在jobName上的字典,其中包含的字典包含键控在uname上的perm值列表。你知道吗

演示:

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

相关问题 更多 >