【问题标题】:multiply two dictionaries values based on keys match根据键匹配将两个字典值相乘
【发布时间】:2019-07-16 10:44:22
【问题描述】:

我的字典列表如下:

A=[{'a': 2, 'b': 3},{'a': 4, 'b': 5},{'b': 2,'c': 10,'d':8,'e': 9}]

B={'a':2,'b':3,'c':1,'d':8,'e':4}

如果键匹配,我只想将键 A 的值与键 B 的值相乘,否则其他键的值将为零 预期:

C=[{'a': 4, 'b': 9'},{'a': 8, 'b': 15},{'b': 6,'c': 10,'d':64,'e': 36}]

我是这样做的:

new_list=[]
for i in A:
    for k,v in i.items():
        for l,p in B.items():
            if k==l:
                new_d={k:v*p}
                new_list.append(new_d)

它似乎不起作用。我正在寻找列表理解方法!!!

【问题讨论】:

    标签: arrays python-3.x dictionary


    【解决方案1】:

    使用嵌套列表/字典理解。与dict.get()

    例如:

    A=[{'a': 2, 'b': 3},{'a': 4, 'b': 5},{'b': 2,'c': 10,'d':8,'e': 9}]
    B={'a':2,'b':3,'c':1,'d':8,'e':4}
    
    result = [{k: B.get(k, 0)*v for k, v in i.items() } for i in A]
    print(result)
    

    输出:

    [{'a': 4, 'b': 9}, {'a': 8, 'b': 15}, {'b': 6, 'c': 10, 'd': 64, 'e': 36}]
    

    【讨论】:

    • 为这个答案投票,这是除了我的答案之外最简单的方法。
    【解决方案2】:

    试试这个,

    >>> A=[{'a': 2, 'b': 3},{'a': 4, 'b': 5},{'b': 2,'c': 10,'d':8,'e': 9}]
    >>> B={'a':2,'b':3,'c':1,'d':8,'e':4}
    >>> [{key: (value*B[key] if key in B else 0) for key, value in d.items()} for d in A]
    [{'a': 4, 'b': 9}, {'a': 8, 'b': 15}, {'b': 6, 'c': 10, 'd': 64, 'e': 36}]
    

    【讨论】:

      【解决方案3】:

      如果你想使用基本的 for 循环:

      A=[{'a': 2, 'b': 3},{'a': 4, 'b': 5},{'b': 2,'c': 10,'d':8,'e': 9}]
      B={'a':2,'b':3,'c':1,'d':8,'e':4}
      C = []
      
      for dict in A:
          d = {}
          for key,val in dict.items():
              d.update({key:dict[key] * B[key]})
          C.append(d)
      
      print (C)
      

      输出:

      [{'a': 4, 'b': 9}, {'a': 8, 'b': 15}, {'b': 6, 'c': 10, 'd': 64, 'e': 36}]
      

      什么等价于(列表理解):

      C = [{key: (dict[key]*B[key] if key in B else 0) for key, value in dict.items()} for dict in A]
      
      print (C)
      

      输出:

      [{'a': 4, 'b': 9}, {'a': 8, 'b': 15}, {'b': 6, 'c': 10, 'd': 64, 'e': 36}]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-04
        • 2019-06-19
        • 1970-01-01
        • 2019-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多