谁能帮我找到字典 python 2.7 的平均值?

Can anyone help me with finding the average of dictionary python 2.7?

我在遍历字典时遇到问题。该程序应该打印字典中每个名字旁边的数字的平均值。谁能帮我弄清楚我做错了什么?以下是我目前的代码:

guest={"Mary":"15", "Joe":"13", "Dustin":"12"}

def CalcAverage(guest):
    total = 0.0
    numPersons = 0
    for key,value in guest.items():
        numPersons += len(guest[key])
        total = float(sum(guest[value]))
    return total/numPersons

print CalcAverage(guest)

你做错了什么:

  1. keyvalue 已经包含来自 字典。不需要像在 guest[key].
  2. numPersons 应在循环的每次迭代中递增 1, 而不是 len(guest[key]) 所做的值的长度。
  3. total 应该累加值的总和,而不是赋值 每一个,即 total += float(value).

更正这 3 项会产生如下代码:

guest= {"Mary":"15", "Joe":"13", "Dustin":"12"}

def CalcAverage(guest):
    total = 0.0
    numPersons = 0
    for key, value in guest.items():
        numPersons += 1
        total += float(value)
    return total / numPersons

>>> CalcAverage(guest)
13.333333333333334

您可以通过使用生成器表达式将每个值转换为浮点数、对这些浮点数求和,然后除以来宾词典中的项目数来简化此操作:

def CalcAverage(guest):
    return sum(float(v) for v in guest.values()) / len(guest)

>>> CalcAverage(guest)
13.333333333333334

您一直在将数字定义为字符串,这使得它们不太容易处理。更好的是:

guest={"Mary": 15, "Joe": 13, "Dustin": 12}

或已经浮动:

guest={"Mary": 15.0, "Joe": 13.0, "Dustin": 12.0}

您还使用了 float(sum(guest[value]),它有两个主要问题:

  • guest[value] 尝试从字典中获取存储在 value 中的键值。但是 value 不是密钥,那是行不通的。
  • 您只有字符串值,不能将它们与 sum() 相加。

代码中还有很多其他问题,一些例子:

  • for key,value in guest.items(): 使键和它们的值在 for 块中作为 keyvalue 可用。您以后不需要索引 guest。这意味着 guest[key]value.
  • 相同
  • len(guest[key]) 会 return value 的长度,这是一个数字,return 2(所有数字字符串都有两位数) .

你想要存档的东西可以更容易地完成:

def calc_average(guest)
    length = len(guest)
    values = [float(value) for value in guest.values()]
    return sum(values) / length

第一行获取字典的长度。第二行从列表中提取所有值并将它们转换为浮点数。这是一个列表理解。最后一行对值求和,return 求平均值。顺便说一句:我还将函数的名称改编为通常的 Python 函数命名约定。

Value 是一个 str 类型,您可以将其转换为 float 并简单地递增到 total

def CalcAverage(guest):
total = 0.0
for key, value in guest.items():
    total += float(value)
return total / len(guest)

print CalcAverage(guest)

你可以使用Python3.0的functools中的reduce。它更复杂。它接受要处理的迭代器,但它本身不是迭代器。它returns一个结果

def CalcAverage(guest):
    total = 0.0
    total = reduce(lambda x, y: float(x) + float(y), guest.values())
    return total / len(guest)

print CalcAverage(guest)