【问题标题】:Merge list values inside a dictionary合并字典中的列表值
【发布时间】:2014-12-19 00:04:57
【问题描述】:

我必须解决一些在 PHP 中对我来说非常简单的问题,但我错过了如何在 Python 中解决的问题。

假设我有以下字典:

data = {'year': [], 'week': [], 'value': []}

所有列表的长度总是相同的,因此数据的可能值是:

{'year': ['2014', '2014', '2014'], 'week': ['44', '49', '49'], 'value': [15, 20, 30]}

我想做的事:

当迭代列表'week'时:

· 如果当前周与列表中的下一周具有相同的值:

·· 用下一周覆盖那一周,用下一个覆盖年份,并将与该周具有相同索引的值相加。

我期望得到的:

所以结果是:

{'year': ['2014', '2014'], 'week': ['44', '49'], 'value': [15, 50]}

我的尝试:

· 遍历字典,但是我对python的了解很少,在尝试构建for循环时得到了object of type 'bool' has no len()之类的错误。 (我用过构造for i in range len(dictionary.index)

· 查看了itertoolscollections,但我找不到合适的。

· 以简单的方式逐步尝试:将字典中的列表合并到另一个列表中,然后逐个比较项目,将值保存到另一个列表中,等等。

有什么想法或文档要检查吗? (除了继续学习python)

【问题讨论】:

    标签: python list dictionary merge iteration


    【解决方案1】:

    使用itertools.groupby 并迭代enumerate(d['week'])

    from itertools import groupby
    from operator import itemgetter
    
    d = {'year': ['2014', '2014', '2014'], 'week': ['44', '49', '49'], 'value': [15, 20, 30]}
    out = {'year': [], 'week': [], 'value': []}
    
    for k, g in groupby(enumerate(d['week']), key=itemgetter(1)):
        total = 0
        for i, x in g:
            total += d['value'][i]
        # Now `i` is the last index of the group and `x` is the last week of the group,
        # We can use these to get values from 'year' and 'week'.
        out['year'].append(d['year'][i])
        out['week'].append(x)
        out['value'].append(total)
    
    print out
    #{'week': ['44', '49'], 'value': [15, 50], 'year': ['2014', '2014']}
    

    【讨论】:

    • 太棒了,我查看了groupby,但enumerate 是我在索引中使用它时所缺少的东西......此外,这是一种甜蜜的“pythonic”方式 TFYH
    猜你喜欢
    • 2022-12-18
    • 2015-01-10
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2017-04-11
    相关资源
    最近更新 更多