Python 附加到列表中的所有词典

Python 附加到列表中的所有词典,python,dictionary,Python,Dictionary,我有一个列表all。里面有很多字典。我必须将键值datetime附加到所有这些值 以下是我的方法: all = [{'name': "sadness", 'class': 'A1'}, {'name': 'joy', 'class': 'B1'}, {'name': 'mark', 'class': 'C1'}] import datetime for d in all: d['datetime'] = datetime.datetime.n

我有一个列表
all
。里面有很多字典。我必须将键值
datetime
附加到所有这些值

以下是我的方法:

all = [{'name': "sadness", 'class': 'A1'},
       {'name': 'joy',     'class': 'B1'},
       {'name': 'mark',    'class': 'C1'}]

import datetime

for d in all:
    d['datetime'] = datetime.datetime.now()

print all

如果你想在所有字典中使用一致的时间,有没有其他更快的方法

a = [{'name':"sadness",'calss':'A1'},{'name':'joy','class':'B1'},{'name':'mark','class':'C1'}]
import datetime
c={'datetime':datetime.datetime.now()}
for d in a:
    d.update(c)
print a

由于您的数据在本质上似乎是表格,您可以使用:

如果你选择把它作为一个目录列表,我很惊讶你的循环是实现这一目标的唯一途径

而且,
all
在python中不是一个好的变量名


计时

对于一个包含1M个元素的大列表,假设您首先将数据存储在一个数据帧中,则速度会快8倍

N = 1000000
all = [ {'a': 'a%s'%i, 'b':i} for i in range(N) ]
df = pd.DataFrame(all)

%timeit df['datetime'] = datetime.datetime.now()
100 loops, best of 3: 6.38 ms per loop
%timeit for d in all: d['datetime'] = now
10 loops, best of 3: 46.7 ms per loop
或者,重复调用now():


小心
all
是一个内置函数。随着当前日期时间的更改,您将向字典中添加不同的值。也许您应该在循环之前声明
current\u date=datetime.datetime.now()
并使用
d['datetime']=current\u date
这样就不可能有更快的方法了。如果有任何语法上更简洁的表达,它仍然需要做同样的工作。@AChampion,哦,但是有。请参见我的回答注:大部分时间都浪费在重复调用
now()
上。看我的安瑟里的时间安排。即使您避免了这种情况,也有一种更快的方法。
c=datetime.datetime.now()
d['datetime']=c
比调用
update()
@AChampion要快得多,假设数据存储在一个数据帧中(即不需要转换),这是此类表格数据的自然选择,这个答案中的答案要快得多。这都是你从哪里开始测量的——OP没有使用熊猫,结果也不是OP要求的格式。除此之外,我同意它可以更快。
N = 1000000
all = [ {'a': 'a%s'%i, 'b':i} for i in range(N) ]
df = pd.DataFrame(all)

%timeit df['datetime'] = datetime.datetime.now()
100 loops, best of 3: 6.38 ms per loop
%timeit for d in all: d['datetime'] = now
10 loops, best of 3: 46.7 ms per loop
%timeit for d in all: d['datetime'] = datetime.datetime.now()
1 loops, best of 3: 597 ms per loop