迭代Python2D列表以查找值

迭代Python2D列表以查找值,python,list,loops,iteration,Python,List,Loops,Iteration,我试图迭代Python2D列表。当算法在列表上迭代时,它会将密钥添加到新列表中,直到检测到新值为止。然后对列表应用一个操作,然后清空列表,以便再次使用,如下所示: original_list = [('4', 'a'), ('3', 'a'), ('2', 'a'), ('1', 'b'), ('6', 'b')] 当算法读取原始\u列表时,它应计算每个对象的第二个值,并解密它是否与前一个值不同;如果没有,请将其添加到临时列表中 这是psedo代码 temp_list = [] new_val

我试图迭代Python2D列表。当算法在列表上迭代时,它会将密钥添加到新列表中,直到检测到新值为止。然后对列表应用一个操作,然后清空列表,以便再次使用,如下所示:

original_list = [('4', 'a'), ('3', 'a'), ('2', 'a'), ('1', 'b'), ('6', 'b')]
当算法读取
原始\u列表
时,它应计算每个对象的第二个值,并解密它是否与前一个值不同;如果没有,请将其添加到临时列表中

这是psedo代码

temp_list = []
new_value = original_list[0][1] #find the first value

for key, value in original_list:
    if value != new_value:
        temp_list.append(new_value)
应该输出

temp_list = ['4', '3', '2']

我不完全确定你在问什么,但我认为这有助于:

>>> from itertools import groupby
>>> original_list = [('4', 'a'), ('3', 'a'), ('2', 'a'), ('1', 'b'), ('6', 'b')]
>>> [(zip(*group)[0], k) for k, group in groupby(original_list, key=lambda x: x[1])]
[(('4', '3', '2'), 'a'), (('1', '6'), 'b')]
其作用:它使用
key=lambda x:x[1]
将列表中的项按其值进行分组,并使用
(zip(*group)[0],k)

获取对应于一个值的键元组,如果“键”不重复,您可以使用a根据键对值进行“排序”,然后提取所需内容

from collections import defaultdict
ddict = defaultdict(list)
for v1, v2 in original_list:
    ddict[v2].append(v1)
ddict
值现在都是
temp\u列表

>>> ddict["a"]
['4', '3', '2']

那么你的问题是什么?另外,如果您将您的预期输出添加到问题中会更好!如果您喜欢使用可排序字典系统。请注意:将
新值定义为
“a”
将导致第一次迭代使用
临时列表执行某些操作,该列表将为空。我想那是不可取的。可能会添加到比较中:
if值!=新值和临时列表:
,以确保您不会使用空列表执行操作?问题是什么?您还可以使用排序的dict类型。在PyPI和其他地方有许多选项(blist、SortedCollections、sortedcontainers、rbtree、bintrees、skiplistdict…)可以在变异时保持排序顺序(代价是一些操作需要对数时间而不是线性时间)。。。因为我不知道这是什么操作,所以我使用了占位符=>
do\u something()
>>> ddict["a"]
['4', '3', '2']