谁能帮我找到字典 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)
你做错了什么:
key
和 value
已经包含来自
字典。不需要像在
guest[key]
.
numPersons
应在循环的每次迭代中递增 1,
而不是 len(guest[key])
所做的值的长度。
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 块中作为 key
和 value
可用。您以后不需要索引 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)
我在遍历字典时遇到问题。该程序应该打印字典中每个名字旁边的数字的平均值。谁能帮我弄清楚我做错了什么?以下是我目前的代码:
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)
你做错了什么:
key
和value
已经包含来自 字典。不需要像在guest[key]
.numPersons
应在循环的每次迭代中递增 1, 而不是len(guest[key])
所做的值的长度。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 块中作为key
和value
可用。您以后不需要索引guest
。这意味着guest[key]
与value
. 相同
len(guest[key])
会 returnvalue
的长度,这是一个数字,return2
(所有数字字符串都有两位数) .
你想要存档的东西可以更容易地完成:
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)