【问题标题】:converting a dictionary to another one [duplicate]将字典转换为另一个[重复]
【发布时间】:2018-01-06 12:23:33
【问题描述】:

我有一本字典,键是整数值,值是字符串列表。 我想反之亦然,字符串成为键,整数成为值。 喜欢:

第一个设计:

{1:["a"], 2:["a","b"], 3:["a"], 4:["b", "cd"], 6:["a","cd"]}

第二个设计:

{"a": [1,2,3,6], "b":[2,4], "cd":[4,6]}

有什么线索吗?谢谢

【问题讨论】:

  • 你有没有尝试过?
  • 我想这就是你要找的Invert Dictionary-python
  • @MohammedKashif 不同之处在于列表中的值是唯一的。

标签: python python-2.7 list dictionary


【解决方案1】:

出于对单线的热爱(注意:效率极低!):

d2 = {val: [key for key in d if val in d[key]] for lst in d.itervalues() for val in lst}

【讨论】:

    【解决方案2】:
    z = {1:["a"], 2:["a","b"], 3:["a"], 4:["b", "cd"], 6:["a","cd"]}
    d = dict()
    
    for k, v in z.iteritems():
        for i in v: 
            if i in d: 
                d[i].append(k)
            else:   
                d[i] = [k]
    

    使用iteritems() 而不是items() 会好一些,因为前者在 Python 2 中创建了一个生成器。

    【讨论】:

    • 也许更好iteritems,因为OP指示Python 2.7?
    【解决方案3】:
    dict1= {1:["a"], 2:["a","b"], 3:["a"], 4:["b", "cd"], 6:["a","cd"]}
    dict2= {}
    for key, value in dict1.items():
       for val in value:
           if val in dict2:
               dict2[val].append(key)
               dict2[val]= list(set(dict2[val]))
           else:
               dict2[val]= [key]
    

    【讨论】:

      【解决方案4】:

      一个简单的方法是创建一个defaultdict,它为新键提供一个空列表,然后为当前字典中的每个列表,为每个元素创建一个键并将原始字典键附加到新列表:

      from collections import defaultdict
      
      orig = {1: ['a'], 2: ['a', 'b'], 3: ['a'], 4: ['b', 'cd'], 6: ['a', 'cd']}
      d = defaultdict(list)
      
      for k, v in orig.items():
          for string in v:
              d[string].append(k)
      
      # d = {'a': [1, 2, 3, 6], 'b': [2, 4], 'cd': [4, 6]}
      

      【讨论】:

        【解决方案5】:

        代码

        first_map = {1: ["a"], 2: ["a", "b"], 3: ["a"], 4: ["b", "cd"], 6: ["a", "cd"]}
        second_map = {}
        for key, value in first_map.items():
            for i in value:
                if i in second_map:
                    second_map[i].append(key)
                else:
                    second_map[i] = [key]
        print(second_map)
        

        【讨论】:

          【解决方案6】:
          from collections import defaultdict
          
          second_dict = defaultdict(list)
          
          for key, value in first_dict.items():
          
              for item in value:
          
                  second_dict[item].append(key)
          

          【讨论】:

            猜你喜欢
            • 2017-12-04
            • 2016-09-14
            • 1970-01-01
            • 2016-10-28
            • 1970-01-01
            • 2011-10-17
            • 2017-10-01
            • 1970-01-01
            • 2012-09-24
            相关资源
            最近更新 更多