将值列表添加到字典列表

白狼

我有两个列表,一个包含字典的列表,另一个包含列表值。

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章