Reverse / invert a dictionary mapping

前端 未结 26 2815
一整个雨季
一整个雨季 2020-11-21 11:47

Given a dictionary like so:

my_map = {\'a\': 1, \'b\': 2}

How can one invert this map to get:

inv_map = {1: \'a\', 2: \'b\'         


        
26条回答
  •  刺人心
    刺人心 (楼主)
    2020-11-21 11:52

    If values aren't unique AND may be a hash (one dimension):

    for k, v in myDict.items():
        if len(v) > 1:
            for item in v:
                invDict[item] = invDict.get(item, [])
                invDict[item].append(k)
        else:
            invDict[v] = invDict.get(v, [])
            invDict[v].append(k)
    

    And with a recursion if you need to dig deeper then just one dimension:

    def digList(lst):
        temp = []
        for item in lst:
            if type(item) is list:
                temp.append(digList(item))
            else:
                temp.append(item)
        return set(temp)
    
    for k, v in myDict.items():
        if type(v) is list:
            items = digList(v)
            for item in items:
                invDict[item] = invDict.get(item, [])
                invDict[item].append(k)
        else:
            invDict[v] = invDict.get(v, [])
            invDict[v].append(k)
    

提交回复
热议问题