如何将值添加到已存在其键的字典中

2024-07-04 07:27:50 发布

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

我有一个for循环,它给了我多个包含2个值的列表。这是for循环,数据取自excel文件。 当我想在字典中添加一个键已经存在的值时,问题就出现了

obj={}
test = ['Tonya Baker - Designer - noemail', ' Jess Huang - Designer - noemail', ' Denise Leung - Bizdev - noemail', ' Kristin Saulsbury - Bizdev - noemail', ' Molly Murphy - Bizdev - noemail', ' Angela Wood - Support - noemail', ' Heather Bond - Support - noemail', ' Natalie Ruiz - Support - noemail', ' Ivan Torres - Software - noemail', ' Max Gordon - Software - noemail', ' Jon Skulski - Software - noemail', ' Peggy Lin - Engineering - noemail', ' Andy Mai - Engineering - noemail', ' Alex Battaglino - Engineering - noemail', ' Evan Marks - Other - noemail', ' August Flanagan - Other - noemail', ' Helen Chi - Other - noemail', ' Ian Pearce - Other - noemail', ' Lisa Lamb - Marketing - noemail', ' Kate Levy - Marketing - noemail', ' Queen Tuba - Marketing - noemail', ' Crystal Baik - Marketing - noemail', ' Melissa Grant - Director - noemail', ' Scott Halcomb - Director - noemail', ' 
Victoria McCulloh - Manager - noemail', ' Shawn Warehouse - Manager - noemail', ' Shawn Norwood - Manager - noemail', ' Alex Bronson - Manager - noemail', ' Noah Solnick - Manager - noemail', ' Natalie Gordon - Csuite - noemail']
for i in test:
    arr = i.lstrip(' ').rstrip(' ').split(' - ')
    if arr[2] == 'noemail':
        arr = arr[:2]
    print(arr)  
# gives multiple arrays [['Tonya Baker', 'Designer'], ['Jess Huang', 'Designer']]
    obj[arr[1]] = arr[0]
print(obj)  # {'Designer': ['Jess Huang']}

但我希望它是这样的:

{'Designer': ['Tonya Baker' ,'Jess Huang']}

Tags: objsupportformanagersoftwaremarketingotherarr
3条回答

使用defaultdict

>>> from collections import defaultdict
>>> test = ['Tonya Baker - Designer - noemail', ' Jess Huang - Designer - noemail', ' Denise Leung - Bizdev - noemail']    
>>> d = defaultdict(list)
>>> for s in test:
...    name, role, *_ = s.split(' - ')
...    d[role.strip()].append(name.strip())    
...
>>> d 
defaultdict(list,
            {'Designer': ['Tonya Baker', 'Jess Huang'],
             'Bizdev': ['Denise Leung']})

你可以用itertools.groupby来理解字典

from itertools import groupby

data = sorted(test, key=lambda x: x.split('-')[1])
res = {k.strip(): [x.split('-')[0].strip() for x in g] for k, g in groupby(data, key=lambda x: x.split('-')[1])}
print(res)

输出:

{'Bizdev': ['Denise Leung', 'Kristin Saulsbury', 'Molly Murphy'],
 'Csuite': ['Natalie Gordon'],
 'Designer': ['Tonya Baker', 'Jess Huang'],
 'Director': ['Melissa Grant', 'Scott Halcomb'],
 'Engineering': ['Peggy Lin', 'Andy Mai', 'Alex Battaglino'],
 'Manager': ['Victoria McCulloh',
             'Shawn Warehouse',
             'Shawn Norwood',
             'Alex Bronson',
             'Noah Solnick'],
 'Marketing': ['Lisa Lamb', 'Kate Levy', 'Queen Tuba', 'Crystal Baik'],
 'Other': ['Evan Marks', 'August Flanagan', 'Helen Chi', 'Ian Pearce'],
 'Software': ['Ivan Torres', 'Max Gordon', 'Jon Skulski'],
 'Support': ['Angela Wood', 'Heather Bond', 'Natalie Ruiz']}

您可以尝试以下方法:

obj={}
test = ['Tonya Baker - Designer - noemail', ' Jess Huang - Designer - noemail', ' Denise Leung - Bizdev - noemail', ' Kristin Saulsbury - Bizdev - noemail', ' Molly Murphy - Bizdev - noemail', ' Angela Wood - Support - noemail', ' Heather Bond - Support - noemail', ' Natalie Ruiz - Support - noemail', ' Ivan Torres - Software - noemail', ' Max Gordon - Software - noemail', ' Jon Skulski - Software - noemail', ' Peggy Lin - Engineering - noemail', ' Andy Mai - Engineering - noemail', ' Alex Battaglino - Engineering - noemail', ' Evan Marks - Other - noemail', ' August Flanagan - Other - noemail', ' Helen Chi - Other - noemail', ' Ian Pearce - Other - noemail', ' Lisa Lamb - Marketing - noemail', ' Kate Levy - Marketing - noemail', ' Queen Tuba - Marketing - noemail', ' Crystal Baik - Marketing - noemail', ' Melissa Grant - Director - noemail', ' Scott Halcomb - Director - noemail', 'Victoria McCulloh - Manager - noemail', ' Shawn Warehouse - Manager - noemail', ' Shawn Norwood - Manager - noemail', ' Alex Bronson - Manager - noemail', ' Noah Solnick - Manager - noemail', ' Natalie Gordon - Csuite - noemail']

for i in test:
    arr = i.lstrip(' ').rstrip(' ').split(' - ')
    if arr[2] == 'noemail':
        arr = arr[:2]
    if arr[1] not in obj:
        obj[arr[1]] = []
    obj[arr[1]].append(arr[0])
print(obj)
"""
{'Designer': ['Tonya Baker', 'Jess Huang'],
 'Bizdev': ['Denise Leung', 'Kristin Saulsbury', 'Molly Murphy'],
 'Support': ['Angela Wood', 'Heather Bond', 'Natalie Ruiz'],
 'Software': ['Ivan Torres', 'Max Gordon', 'Jon Skulski'],
 'Engineering': ['Peggy Lin', 'Andy Mai', 'Alex Battaglino'],
 'Other': ['Evan Marks', 'August Flanagan', 'Helen Chi', 'Ian Pearce'],  
 'Marketing': ['Lisa Lamb', 'Kate Levy', 'Queen Tuba', 'Crystal Baik'],
 'Director': ['Melissa Grant', 'Scott Halcomb'],
 'Manager': ['Victoria McCulloh', 'Shawn Warehouse', 'Shawn Norwood', 'Alex Bronson', 'Noah Solnick'],
 'Csuite': ['Natalie Gordon']}
"""

我们只是在每次检查obj(dict)中是否已经存在我们现在正在获取的密钥,如果没有,我们将创建它,然后我们将添加该列表

相关问题 更多 >

    热门问题