Python|根据第一个元素的出现对元组进行排序
给定一个元组列表,编写一个Python程序,根据元组的第一个元素的出现对列表进行排序。
例子:
Input : [(1, 'Jake'), (2, 'Bob'), (1, 'Cara')]
Output : [(1, 'Jake', 'Cara', 2), (2, 'Bob', 1)]
Input : [('b', 'ball'), ('a', 'arm'), ('b', 'b'), ('a', 'ant')]
Output : [('a', 'arm', 'ant', 2), ('b', 'ball', 'b', 2)]
方法 #1:使用dict.fromkeys
fromkeys()
方法返回一个以给定元素序列作为字典键的新字典。现在,一旦我们将新字典存储在“dct”中,我们就可以轻松地迭代“dct”元素并输出所需的元素。
# Python3 program to Sort tuple based
# on occurrence of first element
def sortOnOccurence(lst):
dct = {}
for i, j in lst:
dct.setdefault(i, []).append(j)
return([(i, *dict.fromkeys(j), len(j))
for i, j in dct.items()])
# Driver code
lst = [(1, 'Jake'), (2, 'Bob'), (1, 'Cara')]
print(sortOnOccurence(lst))
输出:
[(1, 'Cara', 'Jake', 2), (2, 'Bob', 1)]
方法#2:来自集合模块的OrderedDict
此方法是上述方法的替代方法。我们遵循类似的方法,但稍作改动,在使用OrderedDict迭代“dct”时连接元组。
# Python3 program to Sort tuple based
# on occurrence of first element
from collections import OrderedDict
def sortOnOccurence(lst):
dct = {}
for i, j in lst:
dct.setdefault(i, []).append(j)
return([(k, ) + tuple(OrderedDict.fromkeys(v)) + (len(v), )
for k, v in dct.items()])
# Driver code
lst = [(1, 'Jake'), (2, 'Bob'), (1, 'Cara')]
print(sortOnOccurence(lst))
输出:
[(1, 'Jake', 'Cara', 2), (2, 'Bob', 1)]