我在列表中有一个字典,如下所示:
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}]
怎么做?
答案 0 :(得分:2)
使用简单的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)
答案 1 :(得分:0)
确保返回一个元素,在这种情况下是字典。否则,您的字典可能会更新(如果写得正确),但不会重新显示为结果列表的元素:
def update(item_dict):
item_dict['time'] = item_dict['time'] + timedelta(5)
return item_dict
[update(item_dict) for item_dict in a]