Python – 相似索引元素的分组记录
有时,在处理Python记录时,我们可能会遇到一个问题,即我们需要根据其余索引的相似性对元组的特定索引进行分组。这类问题在Web 开发领域有可能的应用。让我们讨论可以执行此任务的某些方式。
Input : test_list = [(4, 5, 10), (4, 5, 7), (4, 5, 12)]
Output : ((4, 5, [10, 7, 12]), )
Input : test_list = [(4, 5, 10)]
Output : [(4, 5, [10])]
方法 #1:使用defaultdict()
+ 循环
上述功能的组合提供了解决此问题的粗略方法。在此,我们根据其余元素的相等性,使用 defaultdict() 将元素和俱乐部组合为一个。
# Python3 code to demonstrate working of
# Group Records on Similar index elements
# Using defaultdict() + loop
from collections import defaultdict
# initializing list
test_list = [(4, 7, 13), (4, 5, 7), (6, 7, 10), (4, 5, 15), (6, 7, 12)]
# printing original list
print("The original list is : " + str(test_list))
# Group Records on Similar index elements
# Using defaultdict() + loop
temp = defaultdict(list)
for a, b, c in test_list:
temp[a, b].append(c)
res = tuple((*key, val) for key, val in temp.items())
# printing result
print("Tuples after grouping : " + str(res))
输出 :
The original list is : [(4, 7, 13), (4, 5, 7), (6, 7, 10), (4, 5, 15), (6, 7, 12)]
Tuples after grouping : ((4, 7, [13]), (4, 5, [7, 15]), (6, 7, [10, 12]))
方法 #2:使用groupby() + generator expression
上述功能的组合可以用来解决这个问题。在此,我们使用 groupby() 对所有元素进行分组,并使用生成器表达式生成元组列表。此方法需要排序列表。
# Python3 code to demonstrate working of
# Group Records on Similar index elements
# Using groupby() + generator expression
from itertools import groupby
# initializing list
test_list = [(4, 7, 13), (4, 5, 7), (6, 7, 10), (4, 5, 15), (6, 7, 12)]
# printing original list
print("The original list is : " + str(test_list))
# Group Records on Similar index elements
# Using groupby() + generator expression
test_list.sort()
res = tuple((*key, [tup[-1] for tup in val]) for key, val in groupby(test_list, lambda tup: tup[:2]))
# printing result
print("Tuples after grouping : " + str(res))
输出 :
The original list is : [(4, 7, 13), (4, 5, 7), (6, 7, 10), (4, 5, 15), (6, 7, 12)]
Tuples after grouping : ((4, 7, [13]), (4, 5, [7, 15]), (6, 7, [10, 12]))