【问题标题】:Compare keys and values from multiple dicts inside a list比较列表中多个字典的键和值
【发布时间】:2021-11-13 11:43:04
【问题描述】:

我有一个列表,里面有多个字典。

这是我的清单:

[{'clicks': 1.2195121951219512, 'conversions': 1.4227642276422763, 'cpc': 2.2357723577235773, 'cpm': 4.471544715447155, 'reach': 90.65040650406505}, 
{'clicks': 1.2048192771084338, 'conversions': 1.4056224899598393, 'cpc': 2.208835341365462, 'cpm': 5.622489959839357, 'reach': 89.5582329317269}]

我的最终目标是制作一个 dict 与上述字典的平均值。

例子:

[{'clicks': 1.2048192771084338, 'conversions': 1.4056224899598393, 'cpc': 2.208835341365462, 'cpm': 5.622489959839357, 'reach': 89.5582329317269}]

我的问题是:如何一次访问和比较来自多个字典的键?有没有更好的方法?

【问题讨论】:

  • 你是什么意思?你想创建一个新的字典,包含它们在上面给定的字典列表中各自值的平均值吗?
  • 是的,我需要创建一个新字典,其中包含上述列表中的平均值。例如:列表中两个字典中的“cpc”,然后将它们平均出来@GhostOps
  • 你想怎么比较?
  • 使用密钥。示例中的两个列表都包含 CPC、Conversions 键。 @DejeneT。
  • 我认为这回答了你的问题stackoverflow.com/questions/34139512/…

标签: python list dictionary key key-value


【解决方案1】:

我希望下面的代码可以帮助你理解如何找到多个dict项列表的平均值

# your list of dict items
dlist = [{'clicks': 1.2195121951219512, 'conversions': 1.4227642276422763, 'cpc': 2.2357723577235773, 'cpm': 4.471544715447155, 'reach': 90.65040650406505}, 
{'clicks': 1.2048192771084338, 'conversions': 1.4056224899598393, 'cpc': 2.208835341365462, 'cpm': 5.622489959839357, 'reach': 89.5582329317269}]
newdict = {}
for d in dlist:
    for k, v in d.items():
        if k in newdict:
            newdict[k].append(v)
        else:
            newdict[k] = [v]
            
# find average from the new dict
for key, value in newdict.items():
    newdict[key] = sum(value)/len(value)
print(newdict)

输出

{'clicks': 1.2121657361151925,
 'conversions': 1.4141933588010578,
 'cpc': 2.2223038495445193,
 'cpm': 5.047017337643256,
 'reach': 90.10431971789598}

【讨论】:

    【解决方案2】:

    如果列表中的所有字典都具有相同的键,则可以使用:

    from statistics import mean
    
    lst = [
        {
            "clicks": 1.2195121951219512,
            "conversions": 1.4227642276422763,
            "cpc": 2.2357723577235773,
            "cpm": 4.471544715447155,
            "reach": 90.65040650406505,
        },
        {
            "clicks": 1.2048192771084338,
            "conversions": 1.4056224899598393,
            "cpc": 2.208835341365462,
            "cpm": 5.622489959839357,
            "reach": 89.5582329317269,
        },
    ]
    
    out = {k: mean(d[k] for d in lst) for k in lst[0]}
    print(out)
    

    打印:

    {
        "clicks": 1.2121657361151925,
        "conversions": 1.4141933588010578,
        "cpc": 2.2223038495445193,
        "cpm": 5.047017337643256,
        "reach": 90.10431971789598,
    }
    

    【讨论】:

    • 这对我有用。虽然我不能使用平均库,因为我需要学习手动完成我的任务,但这帮助了我并且我学习了一个新库。非常感谢:)
    【解决方案3】:

    试试这个...

    lst = [{'clicks': 1.2195121951219512, 'conversions': 1.4227642276422763, 'cpc': 2.2357723577235773, 'cpm': 4.471544715447155, 'reach': 90.65040650406505},
           {'clicks': 1.2048192771084338, 'conversions': 1.4056224899598393, 'cpc': 2.208835341365462, 'cpm': 5.622489959839357, 'reach': 89.5582329317269}]
    
    res = {}
    keys_ = ['clicks', 'conversions', 'cpc', 'cpm', 'reach']
    for j in keys_:
        temp = [i[j] for i in lst]
        res[j] = sum(temp)/len(temp)
    
    print(res)
    

    或者你也可以试试这个单行代码

    print({j:sum([i[j] for i in lst])/len([i[j] for i in lst]) for j in lst[0].keys()})
    

    如果它不起作用,请告诉我...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      相关资源
      最近更新 更多