python – 迭代值列表的字典
发布时间:2020-12-20 12:41:14 所属栏目:Python 来源:网络整理
导读:我有这样的字典 data = { 'a': [95,93,90],'b': [643,611,610]} 我想迭代dict并从每个项的值列表中获取键和值,类似这样 {'a': 95,'b': 643}{'a': 93,'b': 611}{'a': 90,'b': 610} 我已经为此实现了逻辑并且它工作正常,但是当我看到在进程中创建的temp_dict时
我有这样的字典
data = { 'a': [95,93,90],'b': [643,611,610] } 我想迭代dict并从每个项的值列表中获取键和值,类似这样 {'a': 95,'b': 643} {'a': 93,'b': 611} {'a': 90,'b': 610} 我已经为此实现了逻辑并且它工作正常,但是当我看到在进程中创建的temp_dict时,我看到许多中间不必要的循环.最终的结果很好,但我认为它可以改进很多. import timeit data = { 'a': [95,610] } def calculate(**kwargs): temp_dict = {} index = 0 len_values = list(kwargs.values())[0] while index < len(len_values): for k,v in kwargs.items(): temp_dict[k] = v[index] index += 1 yield temp_dict start_time = timeit.default_timer() for k in (calculate(**data)): print(k) print(timeit.default_timer() - start_time) 如何更有效地做到这一点? 解决方法
尝试这样的事情 –
>>> data = { ... 'a': [95,... 'b': [643,610] ... } >>> lst = list(data.items()) >>> lst1 = list(zip(*[i[1] for i in lst])) >>> lst1 [(95,643),(93,611),(90,610)] >>> newlist = [] >>> for aval,bval in lst1: ... newlist.append({lst[0][0]:aval,lst[1][0]:bval}) ... >>> newlist [{'a': 95,'b': 643},{'a': 93,'b': 611},{'a': 90,'b': 610}] 当使用*作为参数将列表传递给函数时,它会将列表分解为单个元素并将其传递给函数.示例 – 如果我们传递[[1,2],[3,4]]它将作为两个不同的参数传递 – [1,2]和[3,4] – 检查此here(部分 – 函数调用中的*) 举例解释一下 – >>> lst = [[1,2,3],[4,5,6],[7,8,9]] >>> def func(a,b,c): ... print(a) ... print(b) ... print(c) ... >>> func(*lst) [1,3] [4,6] [7,9] zip – 此函数返回元组列表,其中第i个元组包含来自每个参数序列或迭代的第i个元素. 更具规模的模型 – >>> lst = list(data.items()) >>> lst [('a',[95,90]),('b',[643,610])] >>> lst1 = list(zip(*[i[1] for i in lst])) >>> lst1 [(95,610)] >>> newlist = [] >>> for x in lst1: ... d = {} ... for i,y in enumerate(lst): ... d[y[0]] = x[i] ... newlist.append(d) ... >>> newlist [{'a': 95,'b': 610}] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |