【问题标题】:how to create dictionary with new keys and values and also add values to one key [duplicate]如何使用新的键和值创建字典并将值添加到一个键[重复]
【发布时间】:2018-12-06 14:42:41
【问题描述】:

我想将元组列表放入字典中,如下所示: 我想要做的是动态添加具有多个值的键。

元组列表:

[((1.0, 54, 0.0), 'less'),
 ((0.0, 55, 0.0), 'less'),
 ((0.0, 26, 0.0), 'less'),
.
.
.
 ((1.0, 40, 0.0), 'more'),
 ((1.0, 25, 1.0), 'less'),]

输出应该是这样的:

标签应该是键,data_points 的元组应该是值 我想创建字典,这样键就不会重复了

{'less': [(1.0, 54, 0.0), (0.0, 55, 0.0), (0.0, 26, 0.0), (1.0, 25, 1.0), (0.0, 15, 0.0), (0.0, 35, 0.0), (0.0, 41, 0.0), (0.0, 20, 0.0), (1.0, 18, 1.0)],   \
'more': [(1.0, 40, 0.0), (0.0, 13, 1.0), (0.0, 50, 1.0), (1.0, 33, 0.0), (1.0, 30, 1.0), (0.0, 39, 1.0), (1.0, 55, 0.0)]}

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    使用setdefault:

    data = [((1.0, 54, 0.0), 'less'),
     ((0.0, 55, 0.0), 'less'),
     ((0.0, 26, 0.0), 'less'),
     ((1.0, 40, 0.0), 'more'),
     ((1.0, 25, 1.0), 'less')]
    
    result = {}
    for value, key in data:
           result.setdefault(key, []).append(value)
    
    print(result)
    

    或者,您可以检查字典中是否不存在该键并将相应的值设置为空列表:

    data = [((1.0, 54, 0.0), 'less'),
            ((0.0, 55, 0.0), 'less'),
            ((0.0, 26, 0.0), 'less'),
            ((1.0, 40, 0.0), 'more'),
            ((1.0, 25, 1.0), 'less')]
    
    result = {}
    for value, key in data:
        if key not in result:
            result[key] = []
        result[key].append(value)
    
    print(result)
    

    输出

    {'less': [(1.0, 54, 0.0), (0.0, 55, 0.0), (0.0, 26, 0.0), (1.0, 25, 1.0)], 'more': [(1.0, 40, 0.0)]}
    

    【讨论】:

      【解决方案2】:

      .append 很适合。

      out_dict = {'less':[], 'more':[]}
      for t in list_of_tuples:
          out_dict[t[1]].append(t[0])
      

      如果您不想提前定义键:

      out_dict = {}
      for t in list_of_tuples:
          if t[1] not in out_dict:
              out_dict[t[1]] = []
          out_dict[t[1]].append(t[0])
      

      【讨论】:

        【解决方案3】:

        只需将每个元组放入字典内的正确列表中。

         a = [((1.0, 54, 0.0), 'less'),
             ((0.0, 55, 0.0), 'less'),
             ((0.0, 26, 0.0), 'less'),
             ((1.0, 40, 0.0), 'more'),
             ((1.0, 25, 1.0), 'less')]
        
        mydict = {'less': list(), 'more': list()}
        
        for i in range(len(a)):
            if a[i][1] == 'less':
                mydict['less'].append(a[i][0])
            else:
                mydict['more'].append(a[i][0])
        

        【讨论】:

          【解决方案4】:

          作为更通用的解决方案,我建议使用 defaultdict:

          from collections import defaultdict
          
          result = defaultdict(list)
          # Assuming your list is in a variable called 'data'
          for data_tuple in data:
              result[data_tuple[1]].append(data_tuple[0])
          

          当一个键被赋予一个不存在的默认字典时,它将调用你提供的工厂函数(在这种情况下只是list)。

          【讨论】:

            【解决方案5】:

            使用defaultdict

            data = [((1.0, 54, 0.0), 'less'),
             ((0.0, 55, 0.0), 'less'),
             ((0.0, 26, 0.0), 'less'),
             ((1.0, 40, 0.0), 'more'),
             ((1.0, 25, 1.0), 'less')]
            
            from collections import defaultdict
            result = defaultdict(list)
            for value, key in data:
                result[key].append(value)
            
            print(result)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-01-18
              • 1970-01-01
              • 1970-01-01
              • 2017-12-17
              • 2021-04-30
              • 2021-12-14
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多