有人能帮我找到python2.7字典的平均值吗?

2024-10-02 12:25:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)

Tags: key代码程序字典value数字名字平均值
3条回答

Value是一个str类型,您可以将其转换为float和simple increment to 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 is。它更复杂。它接受迭代器来处理,但它本身不是迭代器。它返回单个结果

^{pr2}$

你一直在给你的数字定义一个字符串,这使得它们不那么容易处理。最好是:

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

或者已经是浮动的:

^{pr2}$

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

  • guest[value]试图从字典中获取存储在value中的键的值。但是value不是键,它不能工作。在
  • 只有字符串值,不能用sum()求和。在

代码中还有许多其他问题,例如:

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

要归档的内容可以更容易地完成:

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

第一行是字典的长度。第二行从列表中提取所有值并将其转换为浮点值。这是一个列表理解。最后一行求和值并返回平均值。顺便说一句:我还将函数的名称调整为函数的常用Python命名约定。在

你做错了什么:

  1. key和{}已经包含来自 字典。没有必要再去查字典了 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

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

^{pr2}$

相关问题 更多 >

    热门问题