【问题标题】:How to add a value to a a list?如何向列表中添加值?
【发布时间】:2021-01-12 15:28:34
【问题描述】:

我有以下清单。

导入日期时间

my_list = [
    ['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0),'0,012'], 
    ['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0),'0,153'], 
    ['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,114'],
    ['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,109'],
    ['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,252'],
    ['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,012'], 
    ['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,113'], 
    ['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,116'],
    ['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,250'],
    ['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,266']]

通过以下代码,我获取了每个国家/地区的最高价值。但是,这是正确的。我也想把国家加到max_price_per_list

max_prices_by_country = {}
for item in my_list:
    price = max_prices_by_country.setdefault(item[0], 0)
    max_prices_by_country[item[0]] = max(price, float(item[-1].replace(',', '.')))
    country = item[0]

max_price_per_list = [[country] + [str(price).replace('.', ',') for price in max_prices_by_country.values()]]

print(max_price_per_list)

这是我当前的输出:

[['Spain', '0,252', '0,266']]

这是我的首选输出:

[[Morocco, '0,252'], 
['Spain', '0,266']]

【问题讨论】:

    标签: python list dictionary indexing max


    【解决方案1】:

    也许你可以这样做

    import datetime
    my_list = [
        ['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0),'0,012'], 
        ['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0),'0,153'], 
        ['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,114'],
        ['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,109'],
        ['Morocco', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,252'],
        ['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,012'], 
        ['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,113'], 
        ['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,116'],
        ['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,250'],
        ['Spain', 'Fish', datetime.datetime(2020, 11, 17, 0, 0), '0,266']]
        
    max_prices_by_country = {}
    for item in my_list:
        country = item[0]
    
        # if country is not in dict add it with a value, 0
        if country not in max_prices_by_country:
            max_prices_by_country[country] = 0
    
        # get the max value of existing and incoming value (which is item[0])
        max_prices_by_country[country] = max(max_prices_by_country[country], float(item[-1].replace(',', '.')))
    
    # convert the dict to a list of array.
    max_price_per_list = [[k, str(max_prices_by_country[k]).replace('.', ',')] for k in max_prices_by_country]
    
    print(max_price_per_list)
    

    【讨论】:

    • 谢谢。你到底做了什么?
    • 在我的回答中添加一些 cmets
    【解决方案2】:

    对于程序的最后一部分,您似乎正在尝试将字典扁平化为列表。

    你可以做一些不会像这样长的命令:

    max_price_per_list = list(max_prices_by_country.items())
    

    【讨论】:

    • 你到底做了什么?这是一个非常强大的单线。谢谢。
    • @TangerCity dict.items() 返回字典项目的新视图((key, value) 对)。 (记录在here)如果您要对其进行迭代,则无需将其转换为列表。但我认为它可能会有所帮助,因为您正在打印它并且可能只想访问一项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    相关资源
    最近更新 更多