首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当变量被重复时添加到列表中

当变量被重复时添加到列表中
EN

Stack Overflow用户
提问于 2015-11-02 05:56:49
回答 2查看 45关注 0票数 0

所以我在一个函数中列出了所有的模型和avg mpg。

我拥有的地方

代码语言:javascript
复制
list1 = ['DODGE',20, 'BMW', 28, 'FORD',25, 'DODGE',28,'FORD',20]

而预期的产出是

代码语言:javascript
复制
list_out = ['DODGE', 24, 'BMW',28, 'FORD', 22.5]

到目前为止我的代码是

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-02 06:04:51

您的代码似乎依赖于一个神奇的hwy_mpg;该值只是来自mileage_list的最后一个值。

将到目前为止的总数和条目的计数存储在字典中,由制造商输入:

代码语言:javascript
复制
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上键入键,并在以后对值进行求和:

代码语言:javascript
复制
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在每个条目中使用元组:

代码语言:javascript
复制
list1 = [('DODGE', 20), ('BMW', 28), ('FORD', 25), ('DODGE', 28), ('FORD', 20)]

输出使用浮点值,一致地:

代码语言:javascript
复制
>>> 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)]

输出的顺序与预期的输出不同,因为字典顺序是任意的,也取决于当前的散列随机值

票数 1
EN

Stack Overflow用户

发布于 2015-11-02 06:17:14

你可以用字典代替:

代码语言:javascript
复制
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

我觉得这个应该管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33471554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档