Skip to main content
 首页 » 编程设计

python之拼接字典以在 Python 中创建元组列表

2025年05月04日15落叶无声

所以我有这两个字典,其中键是年份(整数),值是 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 在冗长方面是赢家