📜  Python – 相似索引元素的分组记录

📅  最后修改于: 2022-05-13 01:54:31.444000             🧑  作者: Mango

Python – 相似索引元素的分组记录

有时,在处理Python记录时,我们可能会遇到一个问题,即我们需要根据其余索引的相似性对元组的特定索引进行分组。这类问题在Web 开发领域有可能的应用。让我们讨论可以执行此任务的某些方式。

方法 #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]))