Skip to main content
 首页 » 编程设计

python之嵌套字典中的多个键

2025年05月04日9jirigala

代码:

from operator import itemgetter 
names = { 
    'Bucky': 'Roberts', 
    'Tom': 'Roberts', 
    'Bernie' : 'Zunks', 
    'Jenna' : 'Hayes', 
    'Sally': 'Jones', 
    'Amanda':'Roberts', 
    'Tom':'Williams', 
    'Dean':'Hayes', 
    'Bernie':'Barbie', 
    'Tom':'Jones' 
    } 
users = [] 
for k,v in names.items(): 
    users.append({'fname':k,'lname':v}) 
print(users) 
for x in sorted(users, key=itemgetter('fname')): 
    print(x) 

问题:对于最后一个 for 循环(排序一个)来显示字典 names 的所有条目,我需要所有条目,即重复键(一对多映射)也。但是在创建嵌套字典 users 时,遗漏了 2 个 Tom(s) 和 1 个 Bernie。如何避免使用 python 3.4?

请您参考如下方法:

一些可能的改进,但对于你的主要问题,使用全名和一个set作为你的结构,并在空间上split来创建另一个dict(我不确定你是否需要):

names = { 
    'Bucky Roberts', 
    'Tom Roberts', 
    'Bernie Zunks', 
    'Jenna Hayes', 
    'Sally Jones', 
    'Amanda Roberts', 
    'Tom Williams', 
    'Dean Hayes', 
    'Bernie Barbie', 
    'Tom Jones' 
} 
 
users = [] 
for name in names: 
    k, v = name.split() 
    users.append({'fname':k,'lname':v}) 
for x in sorted(users, key=itemgetter('fname')): 
    print(x) 

产生:

{'fname': 'Amanda', 'lname': 'Roberts'} 
{'fname': 'Bernie', 'lname': 'Barbie'} 
{'fname': 'Bernie', 'lname': 'Zunks'} 
{'fname': 'Bucky', 'lname': 'Roberts'} 
{'fname': 'Dean', 'lname': 'Hayes'} 
{'fname': 'Jenna', 'lname': 'Hayes'} 
{'fname': 'Sally', 'lname': 'Jones'} 
{'fname': 'Tom', 'lname': 'Williams'} 
{'fname': 'Tom', 'lname': 'Jones'} 
{'fname': 'Tom', 'lname': 'Roberts'} 

编辑:使用元组并添加 Betty Sue Johnson:

names = { 
    ('Bucky', 'Roberts'), 
    ('Betty Sue', 'Johnson'), 
    ('Tom', 'Roberts'), 
    ('Bernie', 'Zunks'), 
    ('Jenna', 'Hayes'), 
    ('Sally', 'Jones'), 
    ('Amanda', 'Roberts'), 
    ('Tom', 'Williams'), 
    ('Dean', 'Hayes'), 
    ('Bernie', 'Barbie'), 
    ('Tom', 'Jones') 
} 
 
for each in sorted([{'fname':n[0], 'lname':n[1]} for n in names], key=itemgetter('fname')): 
    print(each) 

输出:

{'fname': 'Amanda', 'lname': 'Roberts'} 
{'fname': 'Bernie', 'lname': 'Zunks'} 
{'fname': 'Bernie', 'lname': 'Barbie'} 
{'fname': 'Betty Sue', 'lname': 'Johnson'} 
{'fname': 'Bucky', 'lname': 'Roberts'} 
{'fname': 'Dean', 'lname': 'Hayes'} 
{'fname': 'Jenna', 'lname': 'Hayes'} 
{'fname': 'Sally', 'lname': 'Jones'} 
{'fname': 'Tom', 'lname': 'Roberts'} 
{'fname': 'Tom', 'lname': 'Williams'} 
{'fname': 'Tom', 'lname': 'Jones'}