我正在尝试迭代Python 2D列表。当算法遍历列表时,会将密钥添加到新列表,直到检测到新值。然后将操作应用于列表,然后清空列表,以便可以再次使用它,如下所示:
original_list = [('4', 'a'), ('3', 'a'), ('2', 'a'), ('1', 'b'), ('6', 'b')]
当算法读取original_list
时,它应该评估每个对象的第二个值并解密它是否与前一个值不同;如果没有,请将其添加到临时列表中。
这是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']
答案 0 :(得分:1)
temp_list = []
prev_value = original_list[0][1]
for key, value in original_list:
if value == prev_value:
temp_list.append(key)
else:
do_something(temp_list)
print temp_list
temp_list = [key]
prev_value = value
do_something(temp_list)
print temp_list
# prints ['4', '3', '2']
# prints ['1', '6']
答案 1 :(得分:1)
不完全确定你在问什么,但我认为itertools.groupby
可以提供帮助:
>>> 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)
获取与一个值对应的键的元组。
答案 2 :(得分:1)
如果您的“密钥”不重复,您可以使用defaultdict
根据密钥“排序”值,然后提取您需要的内容
from collections import defaultdict
ddict = defaultdict(list)
for v1, v2 in original_list:
ddict[v2].append(v1)
ddict
值现在全部为temp_list
:
>>> ddict["a"]
['4', '3', '2']