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 timeitdata = { '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_dictstart_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}]总结
以上是内存溢出为你收集整理的python – 迭代值列表的字典全部内容,希望文章能够帮你解决python – 迭代值列表的字典所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)