你如何找到字典的平均值?

时间:2017-12-04 10:08:40

标签: python python-3.x python-2.7

所以让我说我有这本词典

{'Taylor Swift': ['Kanye West']}

由于有一个值(即'Kanye West')除以一个键(即'Taylor Swift')以获得1.0的平均值,我认为1.0是这样的。

让我说我有这本词典

{'Taylor Swift': ['Kanye West', 'Elvis Presley'], 'Adam Sandler': ['Johnny Depp', 'Tom Hanks']}

我希望平均值为2.0,因为有4个值除以2个键。

这是我尝试过的代码:

average = 0
sum = 0
for n in data:
    sum = sum + n
average = sum / len(data)

我通过在线搜索尝试了许多其他方法,我得到的常见错误是:

TypeError: unsupported operand type(s) for +: 'int' and 'str'

7 个答案:

答案 0 :(得分:7)

将“平均值”作为“列表中的平均项目数”,您可以将其实现为:

average_length = sum( len(v) for v in data.values() ) / len(data)

第一部分将您拥有的所有列表的长度加在一起作为字典值,而len(data)是您在字典中拥有的键:值对的数量。

答案 1 :(得分:2)

试试这个

average = 0
sum = 0
for key in data.keys():
    sum = sum +len(data[key])
average = sum / len(data)

答案 2 :(得分:1)

 average = 0
 sum = 0
 for v in data.values():
      sum = sum + len(v)

 average = sum / len(data.keys())

答案 3 :(得分:1)

使用简单的for循环

var= {'Taylor Swift': ['Kanye West', 'Elvis Presley'], 'Adam Sandler': 
['Johnny Depp', 'Tom Hanks']}

sum = 0
for value in var.values():
    sum = len(value)+sum

Average = sum/len(var)
print(Average)

<强>输出

2.0

答案 4 :(得分:0)

也可以在这里使用reduce:

from functools import reduce
data = {'Taylor Swift': ['Kanye West', 'Elvis Presley'], 'Adam Sandler': ['Johnny Depp', 'Tom Hanks']}
reduce((lambda x, y: len(x)+len(y)), data .values()) / len(data )

答案 5 :(得分:0)

首先获取值的长度,然后除以键的长度。

sum(len(i) for i in data.values())/float(len(data.keys()))

,这也给出了相同的结果,

sum(len(i) for i in x.values())/float(len(x))

答案 6 :(得分:0)

你去吧

#some dictionary
d={'Taylor Swift': ['Kanye',' West', 'Elvis',' Presley','l'], 'Adam Sandler': ['Johnny',' Depp', 'Tom',' Hanks']}
#Sum function gets the sum of all values in dictionary
#Len function gets the total number of keys in dictionary
#Multiplying with 1.0 to get exact division, else import division function from _future_ library 
avg = sum(len(v) for v in d.itervalues())*1.0/len(d)
print avg