Python - 使用与字典相同的键来平均所有键值

时间:2016-03-17 06:42:48

标签: python dictionary

让我们说我正在使用这本词典:

ratings={'Shane': {'127 Hours': 5.0, 'Avatar': 4.5}, 'Jaycee': {'127 Hours': 4.8, 'Avatar': 3.5, 'Mad Max: Fury Road': 4.9}}

我试图围绕所有相同的键'值并输出它们:

ratings={'127 Hours': 4.9, 'Avatar': 4.0, 'Mad Max: Fury Road': 4.9}

Mad Max保持不变,因为它不在第一个字典中的任何地方得到平均,而阿凡达和127个小时与他们自己平均,然后合并在一个键中。做这样的事情最好的方法是什么?

4 个答案:

答案 0 :(得分:2)

对类似密钥进行汇总的一种不错方法是使用带有defaultdict的{​​{1}}:

list

输出:

  

{'127 Hours':4.9,'Mad Max:Fury Road':4.9,'Avatar':4.0}

答案 1 :(得分:1)

ratings={'Shane': {'127 Hours': 5.0, 'Avatar': 4.5}, 
        'Jaycee': {'127 Hours': 4.8,
        'Avatar': 3.5, 'Mad Max: Fury Road': 4.9}}
result = {}

for _,value in ratings.items():
    for key,val in value.items():
        result.setdefault(key, []).append(val) 

print {i:sum(result[i])/len(result[i]) for i in result}

输出:

{'127 Hours': 4.9, 'Mad Max: Fury Road': 4.9, 'Avatar': 4.0}

答案 2 :(得分:1)

因为"功能性"总是更好等等;)

from itertools import chain, groupby
from operator import itemgetter

{k: (lambda g: sum(map(itemgetter(1), g)) / len(g))(list(g))
 for k, g in groupby(sorted(chain.from_iterable(map(dict.items,
                                                    ratings.values())),
                            key=itemgetter(0)),
                     itemgetter(0))}

输出:

{'127 Hours': 4.9, 'Mad Max: Fury Road': 4.9, 'Avatar': 4.0}

答案 3 :(得分:0)

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def holder = groovyUtils.getXmlHolder( "Create_shipment#Response" )
// loop item nodes in response message
for( item in holder.getNodeValues( "//error.code" ))
log.info "errors : [$item]"
def no = holder["count(//error)"]

给你import itertools, operator d = {} for movie, items in itertools.groupby(sorted(itertools.chain(*[x.items() for x in ratings.values()])), lambda x: x[0]): items = list(items) d[movie] = sum(x[1] for x in items)/len(items)

我不推荐它但是到底是什么。 :)