Skip to main content
 首页 » 编程设计

python之"merging"使用 lambda 和 map 的字典

2025年05月04日33qq78292959

我在 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

我真的感谢任何解决此问题的帮助。

提前致谢

请您参考如下方法:

您可以映射字典的键值对项目,然后对于每个值,将其用作键以从另一个字典中获取值:

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