所以我有这两个字典,其中键是年份(整数),值是 float 。我想将这两者结合起来,并因此创建一个元组列表,其中包含年份、值 1、值 2。所以像这样:
词典 1
{2011: 1.0,
2012: 2.0,
2013: 3.0}
词典 2
{2011: 4.0,
2012: 5.0,
2013: 6.0}
首选结果:
[(2011, 1.0, 4.0),
(2012, 2.0, 5.0),
(2013, 3.0, 6.0)]
有没有简单的方法来做到这一点?感谢您的帮助!
请您参考如下方法:
这里有几个可能的解决方案:
import timeit
import random
random.seed(1)
def f1(d1, d2):
return [(k, d1[k], d2[k]) for k in list(set(d1.keys() + d1.keys()))]
def f2(d1, d2):
return [(k, d1[k], d2[k]) for k in d1.viewkeys() & d2]
def f3(d1, d2):
return [(k, d1[k], d2[k]) for k in set().union(d1, d2)]
if __name__ == "__main__":
d1_small = {2011: 1.0,
2012: 2.0,
2013: 3.0}
d2_small = {2011: 4.0,
2012: 5.0,
2013: 6.0}
K, I, N = 1000, 100000, 100
d1_large = {i: random.randint(0, K) for i in range(I)}
d2_large = {i: random.randint(0, K) for i in range(I)}
# Small dataset
print timeit.timeit('f1(d1_small,d2_small)', setup='from __main__ import f1, d1_small,d2_small', number=N)
print timeit.timeit('f2(d1_small,d2_small)', setup='from __main__ import f2, d1_small,d2_small', number=N)
print timeit.timeit('f3(d1_small,d2_small)', setup='from __main__ import f3, d1_small,d2_small', number=N)
# Big dataset
print timeit.timeit('f1(d1_large,d2_large)', setup='from __main__ import f1, d1_large,d2_large', number=N)
print timeit.timeit('f2(d1_large,d2_large)', setup='from __main__ import f2, d1_large,d2_large', number=N)
print timeit.timeit('f3(d1_large,d2_large)', setup='from __main__ import f3, d1_large,d2_large', number=N)
结果是:
0.000144082492556
0.000120792445814
9.31601869678e-05
2.70233741278
2.74489385463
2.5809042933
结论:
f3 在性能方面是赢家,而 f2 在冗长方面是赢家
