代码之家  ›  专栏  ›  技术社区  ›  mpx

如何使用Python中的值列表高效地更新dict键值列表

  •  1
  • mpx  · 技术社区  · 3 年前

    目标是更新dict列表中的新键值,从而该值来自另一个嵌套列表。

    这可以通过以下方式实现

    ls1=[[1,23],[2,34,5]]
    ls2=[dict(t=1),dict(t=1)]
    all_data=[]
    
    for x,y in zip(ls1,ls2):
        y['new']=x
        all_data.append(y)
    

    对于紧凑性,我希望For循环的形式为 list comprehension .

    all_data=[y.update({'new':x}) for x,y in zip(ls1,ls2)]
    

    但是,通过这样做,我得到了 None 相反我可以知道如何解决这个问题吗?

    1 回复  |  直到 3 年前
        1
  •  1
  •   Marco Bonelli    3 年前

    这是因为 .update() 退货 None ,而不是更新的词典。你可以 按位OR 将两个词典放在一起(Python>=3.9)以获取所需内容:

    all_data = [y | {'new':x} for x,y in zip(ls1,ls2)]
    

    如果需要支持Python<3.9,您可以从 .items() 取而代之的是旧版本:

    all_data = [dict(y.items(), new=x) for x,y in zip(ls1,ls2)]
    

    请注意,上述两种解决方案都保持了原始词典不变。