我在python中有以下两个字典,我需要转换以获取第三个字典
matrikelnummer_zu_note = { 35135135: 5, 60103513: 3, 10981179: 2, 18637724 : 4 }
note_zahl_zu_string = { 1: "summa cum laude", 2: "magna cum laude", 3: "cum laude", 4: "rite", 5: "non probatum" }
{60103513: 'cum laude', 10981179: 'magna cum laude', 18637724: 'rite', 35135135: 'non probatum'}
所以我需要获取第一个字典的值,并用与第二个字典中相应键相关联的值替换它们。
我可以像这样做一个简单的循环来解决这个问题:
def transform_dict(d1, d2):
for x in d1.keys():
d1[x]=d2[d1[x]]
return d1
但我们的教授希望我们使用map()
函数和lambda
- 表达式来解决问题。
现在我开始尝试"构建"我的解决方案围绕lambda和map函数这样:
def transform_dict(d1, d2):
liste = list(d1.values())
liste.sort()
list(map(lambda elem_from_list,dictionary: dictionary[elem_from_list],liste,d2 ))
但我在最后一行收到错误TypeError: 'int' object is not subscriptable
我真的 非常感谢您解决此问题的任何帮助。
提前多多感谢
答案 0 :(得分:3)
您可以映射字典的键值对项,然后为每个值使用它作为键从另一个字典中获取值:
dict(map(lambda item:
(item[0], note_zahl_zu_string.get(item[1], item[1])),
matrikelnummer_zu_note.items()))
#{10981179: 'magna cum laude',
# 18637724: 'rite',
# 35135135: 'non probatum',
# 60103513: 'cum laude'}
答案 1 :(得分:2)
当您在字典上迭代(即映射)时,它会映射到键上。这解释了您的错误,因为您的lambda
有两个参数,第二个从note_zahl_zu_string
接收密钥。
所以,这样的事情应该足够了:
>>> d1 = matrikelnummer_zu_note
>>> d2 = note_zahl_zu_string
>>> dict(map(lambda k1: (k1, d2[d1[k1]]), d1))
{60103513: 'cum laude', 10981179: 'magna cum laude', 18637724: 'rite', 35135135: 'non probatum'}