2014-04-25 88 views
1

我有内部列表的字典是这样的:字典里面Python列表理解

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}] 

如何做到这一点?

回答

2

使用简单的for-loop。列表解析用于创建新列表,不要将它们用于副作用。

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

for dct in a: 
    dct['time'] = tot 

总结的日期将(在Python 3 functools.reduce)使用reduce()另一种方式:

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

该死的男人,为什么我没有想到。谢谢 – pynovice

+0

但如何获得个人的时间价值和添加。 – pynovice

+0

@ user2032220我不明白你个人的时间价值是什么意思。一旦你有了答案,请不要删除这个问题,我几乎已经向主持人汇报了这一点。 –

0

确保返回的元素,它是在这种情况下字典。否则,您的字典可能会更新(如果写入正确),但不会作为结果列表的元素重新出现:

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

[update(item_dict) for item_dict in a]