我正在做一个作业,要求我创建一个字典,然后根据“ Think Python”预订函数将其反转。该功能必须反转我的字典并将每个列表项转换为单独的键。
我创建了一个字典,为了进行分配,该字典显示了类似的足球运动员,但是我认为我的函数现在应该返回倒排的字典,但不是。
def soccer():
splayers = dict()
splayers = {'Ronaldo': 'Messi', 'Buffon': 'Courtois', 'Mbappe': 'Vinicius'}
def invert_dict(splayers):
inverse = dict()
for key in splayers:
val = splayers[key]
if val not in inverse:
inverse[val] = [key]
else:
inverse[val].append(key)
return inverse
有什么想法吗?谢谢!
答案 0 :(得分:1)
您可以使用setdefault()方法使此操作更简单。
splayers = {'Ronaldo': 'Messi', 'Buffon': 'Courtois', 'Mbappe': 'Vinicius'}
inverted = dict()
for k,v in splayers.items():
inverted.setdefault(v,[]).append(k)
您还可以使用itertools中的groupby()在同一行上执行此操作,但效率较低且不易理解:
from itertools import groupby
inverted = { key:list(values) for key,values in groupby(sorted(splayers),lambda x:splayers[x]) }
答案 1 :(得分:0)
>> splayers = {'Ronaldo': 'Messi', 'Buffon': 'Courtois', 'Mbappe': 'Vinicius'}
>> splayers_inv = {value: key for key, value in splayers.items()}
>> splayers_inv
{'Courtois': 'Buffon', 'Messi': 'Ronaldo', 'Vinicius': 'Mbappe'}