📌  相关文章
📜  Python|根据第一个元素的出现对元组进行排序

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

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)]