【问题标题】:Python list Comprehension inside dictionariesPython 列表里面的字典理解
【发布时间】:2014-04-25 12:04:56
【问题描述】:

我在这样的列表中有一个字典:

a = [{'valid': True, 'power': None, 'altitude': 0.0, 'time': datetime.datetime(2014, 4, 7, 16, 5, 55), 'longitude': 47.938, 'course': 0.0, 'address': None, 'latitude': 29.3309, 'speed': 0.0, u'id': 3L, 'device_id': 1L}]

我只想玩time 键并把所有东西都放好。例如:

[i+timedelta(5) for i in a]

这可行,但在列表中返回时间如下:[.........] 这是可以理解的。但我想要的是:

更改原始列表本身的时间值,例如:

a = [{'valid': True, 'power': None, 'altitude': 0.0, 'time': NEW VALUE, 'longitude': 47.938, 'course': 0.0, 'address': None, 'latitude': 29.3309, 'speed': 0.0, u'id': 3L, 'device_id': 1L}]

如何做到这一点?

【问题讨论】:

    标签: python list dictionary list-comprehension


    【解决方案1】:

    使用简单的 for 循环。列表推导式用于创建新列表,请勿将它们用于副作用。

    it = iter(dct['time'] for dct in a)
    tot = sum(it, next(it))
    
    for dct in a:
       dct['time'] = tot
    

    另一种求和日期的方法是使用reduce()(Python 3 中的functools.reduce):

    >>> dates = [dct['time'] for dct in a]
    >>> reduce(datetime.datetime.__add__, dates)
    datetime.datetime(2014, 4, 7, 16, 5, 55)
    

    【讨论】:

    • 但是如何获取单个时间值并添加。
    • @user2032220 我不明白你所说的个人时间价值是什么意思。得到答案后请不要删除问题,我差点把这个问题报告给版主。
    • 我的列表有不止一本字典,我想添加到每个time 字段中。
    • @user2032220 你的意思是用总时间替换所有时间字段?
    • 是的,我就是这个意思。
    【解决方案2】:

    确保返回一个元素,在本例中为字典。否则,您的字典可能会更新(如果编写正确),但不会作为结果列表的元素重新出现:

    def update(item_dict):
       item_dict['time'] = item_dict['time'] + timedelta(5)
       return item_dict
    
    [update(item_dict) for item_dict in a]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2018-03-18
      • 2021-03-12
      • 1970-01-01
      • 2020-10-18
      相关资源
      最近更新 更多