【问题标题】:Summing dictionary of lists values by key按键汇总列表值字典
【发布时间】:2021-05-11 05:56:05
【问题描述】:

我有一个列表字典如下:

defaultdict(, {0: [[1.0, 2.0, 3.0], [7.0, 8.0, 9.0]], 1: [[4.0, 5.0, 6.0], [10.0, 11.0, 12.0 ]]})

我需要一个字典,通过对列表的值求和来减少维度,如下所示

{0: [6.0, 24.0], 1: [15.0, 33.0]}

提示: 6.0 = [1.0+2.0 +3.0] 24.0 =[7.0+8.0+9.0]

【问题讨论】:

    标签: python-3.x pandas dictionary


    【解决方案1】:

    递归是遍历和评估嵌套字典的有效方法

     defaultDict={0: [[1.0, 2.0, 3.0], [7.0, 8.0, 9.0]], 1: [[4.0, 5.0, 6.0], [10.0, 11.0, 12.0]]}
    
     def walk_the_tree(inputDict,parent_index=None):
         if isinstance(inputDict,dict):
             for key, value in inputDict.items():
                 if isinstance(value,list):
                      ret_index,type,result=walk_the_tree(value,key)
                     print(key, ret_index, type, result)
         elif isinstance(inputDict,list):
             sum=0
             for index,alist in enumerate(inputDict):
                 #print(index,alist)
                 ret_index,type,value=walk_the_tree(alist,index)
                 if type=="Sum List":
                     print ("replace value",parent_index, index, value)
                     defaultDict[parent_index][index]=value
                 print(type,value)
                 if type=="Leaf":
                      sum+=value
            return index,"Sum List",sum
         else:
            return 0,"Leaf", inputDict
        return
    
      walk_the_tree(defaultDict)
    
      print(defaultDict)
    
      output:
      {0: [6.0, 24.0], 1: [15.0, 33.0]}
    

    【讨论】:

      【解决方案2】:

      遍历键并对列表推导中的每个子列表求和:

      d = {0: [[1.0, 2.0, 3.0], [7.0, 8.0, 9.0]], 1: [[4.0, 5.0, 6.0], [10.0, 11.0, 12.0]]}
      
      for k in d:
          d[k] = [sum(l) for l in d[k]]
      
      >>> d
      {0: [6.0, 24.0], 1: [15.0, 33.0]}
      

      也适用于defaultdict。

      使用字典推导可以在不修改原始字典的情况下获得新字典:

      new_d = {k:[sum(l) for l in d[k]] for k in d}
      

      【讨论】:

      • 我有一个递归解决方案,但我需要弄清楚如何进行替换
      猜你喜欢
      • 2014-07-23
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      • 2016-08-06
      相关资源
      最近更新 更多