gpt4 book ai didi

python - 迭代长列表的集合

转载 作者:行者123 更新时间:2023-11-30 23:34:28 25 4
gpt4 key购买 nike

我正在迭代包含约 500.000 个子列表的 10-20 个长列表的集合。列表如下所示:

A = [['a', 'b', 1.7], ['d', 'e', 6.2] ...]
B = [['a', 'b', 2.0], ['d', 'e', 10.0] ...]
C = [['a', 'b', 3.0], ['d', 'e',7.0] ...]

等等...我的目标是最后获得一个列表,如下所示:

final = [['a', 'b', 1.7, 2.0, 3.0], ['d', 'e', 6.2, 6.2, 10.0, 7.0] ...]

我已经通过将模板列表(例如 A)与包含所有列表值(总计)的列表进行比较来使用嵌套循环:

total =[['a', 'b', 1.7], ['d', 'e', 6.2], ['a', 'b', 2.0], ['d', 'e', 10.0], ['a', 'b', 3.0], ['d', 'e',7.0]]

temp = []
for i in A:
new = [i[0:1]]
for j in total:
if i[0] == j[0]:
new.append(j[2])
temp.append(new)

我得到了一些接近我正在寻找的东西,除了初始字符串包含在子列表中。但这在以后很容易解决。这种方法的问题在于,考虑到列表的大小,完整的过程需要大量的时间。任何缩短此过程的替代建议或提示将不胜感激。

最佳答案

字典在这里更合适,因为它允许您在 O(1) 时间内访问与任何键相关的值。

使用collections.defaultdict:

>>> from collections import defaultdict
>>> total =[['a', 'b', 1.7], ['d', 'e', 6.2], ['a', 'b', 2.0], ['d', 'e', 10.0], ['a', 'b', 3.0], ['d', 'e',7.0]]
>>> dic = defaultdict(list)
>>> for item in total:
key = tuple(item[:2]) #tuples can be used as dictionary keys
val = item[2]
dic[key].append(val)
...
>>> dic
defaultdict(<type 'list'>,
{('a', 'b'): [1.7, 2.0, 3.0],
('d', 'e'): [6.2, 10.0, 7.0]})

使用普通的dict:

>>> dic = {}
>>> for item in total:
key = tuple(item[:2]) #tuples can be used as dictionary keys
val = item[2]
dic.setdefault(key, []).append(val)
...
>>> dic
{('a', 'b'): [1.7, 2.0, 3.0], ('d', 'e'): [6.2, 10.0, 7.0]}

关于python - 迭代长列表的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18089237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com