我的元組
[((A,B),2),((C,B),3)]
,我需要整理爲排序元組的元組按字母順序
[((A,B),2),((B,C),3)]
我需要所有的記錄是在使用sorted()
方法按字母順序排列的列表。我用key = lambda x : x[0]
但不起作用。有任何想法嗎?
我的元組
[((A,B),2),((C,B),3)]
,我需要整理爲排序元組的元組按字母順序
[((A,B),2),((B,C),3)]
我需要所有的記錄是在使用sorted()
方法按字母順序排列的列表。我用key = lambda x : x[0]
但不起作用。有任何想法嗎?
可以使用sorted
內list comprehension:
In [3]: tups = [(('A','B'),2),(('C','B'),3)]
In [4]: [(sorted(t[0]), t[1]) for t in tups]
Out[4]: [(['A', 'B'], 2), (['B', 'C'], 3)]
由於@AmiTarovy解決它,但是他的方法不包括排序外元組第二元件上,當存在與相同的第一元件的兩個或更多tuple
元件。
所以這裏是另一種解決方案,它也對外部元組的第二個參數進行排序。
>>> from operator import itemgetter
>>> tups = [(('A','B'),2),(('C','B'),3), (('A','B'),1)]
>>> sorted(tups, key=itemgetter(0,1))
[(('A', 'B'), 1), (('A', 'B'), 2), (('C', 'B'), 3)]
如果你想僅僅通過第一元
>>> from operator import itemgetter
>>> tups = [(('A','B'),2),(('C','B'),3), (('A','B'),1)]
>>> sorted(tups, key=itemgetter(0))
[(('A', 'B'), 2), (('A', 'B'), 1), (('C', 'B'), 3)]
UPDATE
時間消耗排序。輸入數據是100個記錄的
((random.choice(string.ascii_uppercase), random.choice(string.ascii_uppercase)), random.randint(0,100))
結果:
@AmiTarovy只有通過元組的第一個元素排序回答
python3 -m timeit -s "import random; import string; tups = [((random.choice(string.ascii_uppercase), random.choice(string.ascii_uppercase)), random.randint(0,100)) for i in range(100)]" 'from operator import itemgetter; [(sorted(t[0]), t[1]) for t in tups]'
10000 loops, best of 3: 42.7 usec per loop
10000 loops, best of 3: 43.2 usec per loop
10000 loops, best of 3: 43.9 usec per loop
我只有通過第一要素排序答案元組
python3 -m timeit -s "import random; import string; tups = [((random.choice(string.ascii_uppercase), random.choice(string.ascii_uppercase)), random.randint(0,100)) for i in range(100)]" 'from operator import itemgetter; sorted(tups, key=itemgetter(0))'
10000 loops, best of 3: 36.1 usec per loop
10000 loops, best of 3: 36.6 usec per loop
10000 loops, best of 3: 37.9 usec per loop
我與整個排序答案,但第一要素優先
python3 -m timeit -s "import random; import string; tups = [((random.choice(string.ascii_uppercase), random.choice(string.ascii_uppercase)), random.randint(0,100)) for i in range(100)]" 'from operator import itemgetter; sorted(tups, key=itemgetter(0,1))'
10000 loops, best of 3: 61 usec per loop
10000 loops, best of 3: 60.2 usec per loop
10000 loops, best of 3: 60.6 usec per loop
l = [(('A','B'),2),(('C','B'),3)]
f=[(tuple(sorted(x[0])),x[1]) for x in l]
輸出:
[(('A', 'B'), 2), (('B', 'C'), 3)]
您有一個包含兩元組二元組的列表(你想排序)和一個整數。對列表進行排序不會對您有所幫助。 – jonrsharpe