过滤包含元组的列表的列表

时间:2018-09-07 01:22:44

标签: python list tuples

我有以下示例:

tuples = [[('2018','Q1','Dept1'),('2018','Q2','Dept2')],[('2018','Q1','Dept1'),('2018','Q1','Dept2')],[('2018','Q2','Dept1'),('2018','Q2','Dept2')]]

因此,元组中的每个项目都是一个包含2个元素的列表,每个元素都是3个元素的元组。

我想生成一个最终列表newlist,该列表根据每个列表中每个元组的前2个值相等进行过滤

所以,在这个示例中,我希望newlist看起来像:

[[('2018', 'Q1', 'Dept1'), ('2018', 'Q1', 'Dept2')],
 [('2018', 'Q2', 'Dept1'), ('2018', 'Q2', 'Dept2')]]

这是一个简化的示例,而tuples的实际大小可能更大

2 个答案:

答案 0 :(得分:2)

尝试以下操作,迭代feature_div,然后检查tuples的第一个元素的前两个元素是否与第二个元素相同:

i

当然,您也可以使用>>> [i for i in tuples if i[0][:2]==i[1][:2]] [[('2018', 'Q1', 'Dept1'), ('2018', 'Q1', 'Dept2')], [('2018', 'Q2', 'Dept1'), ('2018', 'Q2', 'Dept2')]] >>>

filter

答案 1 :(得分:0)

我首先要根据前两个元素制作字典:

entries = {}
for tuple in tuples:
    key = tuple[:2]
    entries[key] = entries.get(key, []) + [tuple[2]]

然后您可以重新构建新列表

newlist = []
for entry, values in entries.items():
    sublist = []
    for val in values:
        sublist.append(entries + (val,))
    newlist.append(sublist)