输入数据:
input_tuple = (
(1, 'name1', 'Noah'),
(1, 'name2', 'Liam'),
(2, 'name3', 'Mason'),
(3, 'name4', 'Mason'),
(4, 'name5', 'Noah'),
(4, 'name6', 'Liam'),
(5, 'name7', 'Elijah'),
(5, 'name8', 'Noah'),
(5, 'name9', 'Liam')
)
转换成dict(键,值):
^{pr2}$只是为了了解数据模型,还进行了一些筛选:
^{3}$现在我想消除重复,然后恢复到如下所示的元组: 重复匹配条件: 1) 消除重复,如果长度(值)>1 2) 值应该完全匹配,而不是部分匹配。在
注: 键2和3的值不重复,因为len(value)不是-gt 1 关键字4的值已丢失,因为它完全重复 由于我们正在进行精确匹配,因此在键5中值['Noah',Liam]将不去。在
output_tuple =
(
(1, 'name1', 'Noah'),
(1, 'name2', 'Liam'),
(2, 'name3', 'Mason'),
(3, 'name4', 'Mason'),
(5, 'name7', 'Elijah'),
(5, 'name8', 'Noah'),
(5, 'name9', 'Liam')
)
我试过的代码:
from functools import reduce
from collections import defaultdict
input_tuple_dictionary = defaultdict(list)
for (key, *value) in input_tuple:
input_tuple_dictionary[key].append(value[1])
input_tuple_dictionary
for index in range(len(input_tuple_dictionary)-1):
for key, value in input_tuple_dictionary.items():
if len(value) > 1:
if value == value[index+1]:
print(key)
这里有一个使用} recipe 。在
defaultdict
对象和toolz.unique
对象的defaultdict
。toolz.unique
相当于文档中可用的itertools
^{其思想是查找具有单独值的键以及不具有重复值的键。这两类的结合构成了你的结果。在
结果:
^{pr2}$跳过重复项的一个常见解决方案是保留一个包含您已经看到的所有元素的集合。如果以前见过对象,则不会将其添加到结果中。在
棘手的一点是,您尝试取消复制的对象是驻留在集合中不同元组中的多个对象的聚合。使用
groupby
是将这些对象集中在一个方便的包中的有效方法。在结果:
^{pr2}$如果你不明白,请问
祝你好运
相关问题 更多 >
编程相关推荐