所以我在一个函数中列出了所有的模型和avg mpg。
我拥有的地方
list1 = ['DODGE',20, 'BMW', 28, 'FORD',25, 'DODGE',28,'FORD',20]而预期的产出是
list_out = ['DODGE', 24, 'BMW',28, 'FORD', 22.5]到目前为止我的代码是
def average_mpg_by_maker(mileage_list):
maker_list = []
total_hwy = 0
counter = 0
list_makers = []
for hwy_mpg, maker in mileage_list:
if maker not in maker_list:
maker_list.append(maker)
for make in maker_list:
total_hwy += hwy_mpg
counter +=1
list_makers.extend([make,total_hwy])
return list_makers这将导致所有的mpg继续添加,而不管模型如何。我怎么才能修好它?
编辑:计数器使总mpg可以除以make出现的次数,例如,对于'DODGE' appeared 2 times so 48/2= 24 mpg
发布于 2015-11-02 06:04:51
您的代码似乎依赖于一个神奇的hwy_mpg;该值只是来自mileage_list的最后一个值。
将到目前为止的总数和条目的计数存储在字典中,由制造商输入:
def average_mpg_by_maker(mileage_list):
per_maker = {}
for maker, mpg in mileage_list:
info = per_maker.setdefault(maker, {'total': 0, 'count': 0})
info['total'] += mpg
info['count'] += 1
return [(maker, info['total'] / info['count']) for maker, info in per_maker.items()]您还可以简单地将条目分组到列表中,在maker上键入键,并在以后对值进行求和:
def average_mpg_by_maker(mileage_list):
per_maker = {}
for maker, mpg in mileage_list:
per_maker.setdefault(maker, []).append(mpg)
return [(maker, sum(entries) / len(entries)) for maker, entries in per_maker.items()]上面的函数假设您的mileage_list在每个条目中使用元组:
list1 = [('DODGE', 20), ('BMW', 28), ('FORD', 25), ('DODGE', 28), ('FORD', 20)]输出使用浮点值,一致地:
>>> def average_mpg_by_maker(mileage_list):
... per_maker = {}
... for maker, mpg in mileage_list:
... info = per_maker.setdefault(maker, {'total': 0, 'count': 0})
... info['total'] += mpg
... info['count'] += 1
... return [(maker, float(info['total']) / info['count']) for maker, info in per_maker.items()]
...
>>> list1 = [('DODGE', 20), ('BMW', 28), ('FORD', 25), ('DODGE', 28), ('FORD', 20)]
>>> average_mpg_by_maker(list1)
[('FORD', 22.5), ('DODGE', 24.0), ('BMW', 28.0)]输出的顺序与预期的输出不同,因为字典顺序是任意的,也取决于当前的散列随机值。
发布于 2015-11-02 06:17:14
你可以用字典代替:
dict1 = {'DODGE':20, 'BMW': 28, 'FORD',25, 'DODGE',28,'FORD',20}
replication=dict1
dict2={}
return_dict={}
for key in replication.keys():
if key not in return_dict.keys():
return_dict[key]=replication[key]
dict2[key]=1
else:
return_dict[key]+=replication[key]
dict2[key]+=1
del replication[key]
for key in return_dict.keys():
return_dict[key]/=dict2[key]
return return_dict我觉得这个应该管用。
https://stackoverflow.com/questions/33471554
复制相似问题