【问题标题】:Using zip and list comprehension to create a dictionary使用 zip 和列表理解来创建字典
【发布时间】:2017-11-24 12:12:46
【问题描述】:

我有两个数组:

a = [0.001,0.01,0.1,1]
h = [2,4,8,16,32,64]

我想创建一个字典,其中字典键是 ah 值的元组,字典值是一个空列表。但是,我需要这样做的方式是使每个唯一的 a 具有 h 中的每个值,并具有所需的输出:

 d = {(0.001,2):[], (0.001,4):[], (0.001,8):[], (0.001,16):[], (0.001,32):[], (0.001,64):[],
   (0.01,2):[], (0.01,4):[], (0.01,8):[], (0.01,16):[], (0.01,32):[], (0.01,64):[],
   (0.1,2):[], (0.1,4):[], (0.1,8):[], (0.1,16):[], (0.1,32):[], (0.1,64):[],
   (1,2):[], (1,4):[], (1,8):[], (1,16):[], (1,32):[], (1,64):[]}

问题是,像上面那样手动写出来很乏味。

有没有办法做到这一点,使用zip 或列表理解?提前致谢

【问题讨论】:

    标签: python list dictionary zip list-comprehension


    【解决方案1】:

    您需要的不是zip,它不会合并您的列表,而是itertools.product 在字典理解中:

    import itertools
    
    a = [0.001,0.01,0.1,1]
    h = [2,4,8,16,32,64]
    
    d = {z:[] for z in itertools.product(a,h)}
    
    print(d)
    

    结果:

    {(0.01, 2): [], (0.1, 64): [], (0.001, 64): [], (0.01, 64): [], (0.001, 2): [], (1, 4): [], (0.01, 4): [], (1, 64): [], (0.1, 8): [],
    (0.01, 8): [], (1, 2): [], (0.1, 32): [], (0.001, 32): [], (0.01, 32): [], (1, 16): [], (0.001, 8): [], (1, 8): [], (0.1, 16): [],
    (0.001, 16): [], (0.01, 16): [], (0.001, 4): [], (1, 32): [], (0.1, 4): [], (0.1, 2): []}
    

    【讨论】:

    • 领先我几秒钟...我会使用itertools.product(set(a), h),以防a中有重复项
    • 是的(h 也是如此)。在这种情况下,情况似乎并非如此:10 的幂与 2 的幂。
    • 确实,'h'也一样
    猜你喜欢
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2010-12-17
    • 2015-05-22
    • 2020-03-16
    • 2018-02-28
    相关资源
    最近更新 更多