我有两个列表,一个包含字典的列表,另一个包含列表值。
l_dic = [
{
'a': 5,
'b': 7,
'c': [1,2,3,4,5]
},
{
'a': 12,
'b': 4,
'c': [1,2,3,4,5]
}
]
val = [458,646]
现在,我尝试将值添加到字典中,因此结果看起来像这样:
res_dic = [
{
'a': 5,
'b': 7,
'c': [1,2,3,4,5],
'd': 458
},
{
'a': 12,
'b': 4,
'c': [1,2,3,4,5],
'd': 646
}
]
我该如何实现?
您可以将Python内置函数zip
与列表理解一起使用
l_dic = [{**d, 'd': e} for d, e in zip(l_dic, val)]
输出:
[
{
"a": 5,
"b": 7,
"c": [1, 2, 3, 4, 5],
"d": 458
},
{
"a": 12,
"b": 4,
"c": [1, 2, 3, 4, 5],
"d": 646
}
]
或者您可以使用for循环:
for d, v in zip(l_dic, val):
d['d'] = v
这是建议的解决方案的基准:
from simple_benchmark import BenchmarkBuilder
b = BenchmarkBuilder()
@b.add_function()
def kederrac_for_loop(args):
l_dic, val = args
for d, v in zip(l_dic, val):
d['d'] = v
@b.add_function()
def kederrac_list_comprehension(args):
l_dic, val = args
l_dic = [{**d, 'd': e} for d, e in zip(l_dic, val)]
@b.add_function()
def GoodDeeds_for_loop(args):
l_dic, val = args
for i in range(len(val)):
l_dic[i]['d'] = val[i]
@b.add_function()
def Nizam_solution(args) :
l_dic, val = args
def assign(x):
l_dic[x]['d'] = val[x]
#runs paralelly utilizing all cores on your machine
ignore_this = [*map(lambda x: assign(x),range(len(l_dic)))]
@b.add_arguments('Number of elements')
def argument_provider():
for exp in range(2, 16):
size = 2**exp
l_dic = [{i : choice(range(100)) for i in range(choice(range(3, 100)))} for _ in range(size)]
val = list(range(size))
yield size, (l_dic, val)
r = b.run()
r.plot()
输出:
如您所见,for循环解决方案是最快的解决方案
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句