Python|二进制元素列表分组
有时在使用数据库时,我们需要执行某些更像查询语言的列表操作,例如,嵌套列表元素相对于其他索引元素的分组。本文处理二进制嵌套列表并将每个嵌套列表元素相对于其其他索引元素进行分组
方法#1:使用列表推导
列表理解可以执行通常需要 1-2 行 4-5 行的任务。这通过根据与列表的另一个元素的匹配分配给每个数字值来对元素进行分组。
# Python3 code to demonstrate
# to perform binary list grouping
# using list comprehension
# initializing list
test_list = [["G", 0], ["F", 0], ["B", 2],
["E", 2], ['I', 1], ['S', 1],
['S', 2], ['T', 2], ['G', 0]]
# using list comprehension
# to perform binary list grouping
temp = set(map(lambda i : i[1], test_list))
res = [[j[0] for j in test_list if j[1] == i] for i in temp]
# printing result
print ("The grouped list is : " + str(res))
输出:
The grouped list is : [['G', 'F', 'G'], ['I', 'S'], ['B', 'E', 'S', 'T']]
方法#2:使用itertools.groupby() + itemgetter()
我们也可以使用 groupby函数来执行这个特定的任务。此方法遵循 2-3 个步骤。首先,序列相对于第二个元素进行排序,现在可以将其输入以进行分组,然后进行分组。最后,我们根据结果的要求打印第一个元素。
# Python3 code to demonstrate
# to perform binary list grouping
# using itertools.groupby() + itemgetter()
from itertools import groupby
from operator import itemgetter
# initializing list
test_list = [["G", 0], ["F", 0], ["B", 2],
["E", 2], ['I', 1], ['S', 1],
['S', 2], ['T', 2], ['G', 0]]
# using itertools.groupby() + itemgetter()
# to perform binary list grouping
test_list.sort(key = itemgetter(1))
groups = groupby(test_list, itemgetter(1))
res = [[i[0] for i in val] for (key, val) in groups]
# printing result
print ("The grouped list is : " + str(res))
输出:
The grouped list is : [['G', 'F', 'G'], ['I', 'S'], ['B', 'E', 'S', 'T']]
方法 #3:使用collections.defaultdict()
这是一种传统的方法,即依次对具有相应值的所有键进行散列处理,然后打印散列列表对应的值。
# Python3 code to demonstrate
# to perform binary list grouping
# using collections.defaultdict()
import collections
# initializing list
test_list = [["G", 0], ["F", 0], ["B", 2],
["E", 2], ['I', 1], ['S', 1],
['S', 2], ['T', 2], ['G', 0]]
# using collections.defaultdict()
# to perform binary list grouping
res = collections.defaultdict(list)
for val in test_list:
res[val[1]].append(val[0])
# printing result
print ("The grouped list is : " + str(res.values()))
输出:
The grouped list is : dict_values([['G', 'F', 'G'], ['I', 'S'], ['B', 'E', 'S', 'T']])