如何使用 Python 中的值列表有效地更新字典键值列表
How to efficiently updating list of dict key-values with list of value in Python
objective是在一个dict列表中更新新的key-value,其中的值来自另一个嵌套列表。
这可以通过
实现
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-loop 的形式为 list comprehension
。
all_data=[y.update({'new':x}) for x,y in zip(ls1,ls2)]
但是,通过这样做,我得到了 None
的列表。我可以知道如何解决这个问题吗?
这是因为.update()
returnsNone
,不是更新的词典。你可以bitwise-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)]
请注意,上述两种解决方案均未更改原始词典。
objective是在一个dict列表中更新新的key-value,其中的值来自另一个嵌套列表。
这可以通过
实现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-loop 的形式为 list comprehension
。
all_data=[y.update({'new':x}) for x,y in zip(ls1,ls2)]
但是,通过这样做,我得到了 None
的列表。我可以知道如何解决这个问题吗?
这是因为.update()
returnsNone
,不是更新的词典。你可以bitwise-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)]
请注意,上述两种解决方案均未更改原始词典。