繁体   English   中英

附加到列表中的所有字典

[英]Append to all dictionaries in a list

我有一个列表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

由于您的数据本质上是表格形式的,因此可以使用pandas.DataFrame

import pandas as pd
df = pd.DataFrame(all)
df['datetime'] = datetime.datetime.now()
print df

如果您选择将其保留为字典列表,那么我很遗憾您的循环是实现该目标的唯一方法。

另外,在python中, all是一个好的变量名。


时机

对于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():

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM