[英]List/Tuple sorting issue in python
我是編程的新手,我正在創建一個配對計划,以比較我使用列表進行存儲的個性得分,這是我的代碼:
`ps = int(personality_score)
potential_partners = partners.Partners()
while potential_partners.available():
partner = []
personality_scores = []
a = potential_partners.get_name()
f = int(potential_partners.get_personality_score())
if ps == f:
print("This is your match" + a)
else:
g = abs(int(ps - f))
h = int(g)
personality_scores.append(h)
partner.append(a)
partner_compatability =list(zip(personality_scores, partner))
partner_compatability.sort(key = operator.itemgetter(0))
for sub in partner_compatability:
print(sub)`
我查看了與此相關的多個問題和答案,但沒有一個對我有用,列表中的輸出是這樣的:
`[['Mary Smith', 1]]
[['Juan Lopez', 5]]
[['Leslie Liu', 11]]
[['Tatiana Ivanov', 15]]
[['Andre Leroy', 11]]
[['Sam Augusta', 7]]
[['Adalbert Weber', 1]]`
但應按從低到高的順序排序:
`[['Mary Smith', 1]]
[['Adalbert Weber', 1]]
[['Juan Lopez', 5]]
[['Sam Augusta', 7]]
[['Leslie Liu', 11]]
[['Andre Leroy', 11]]
[['Tatiana Ivanov', 15]]`
(我也是一個新手程序員,直到有一個更好的答案為止),您可以做我所做的事情:只需顛倒順序然后排序。
lst = [['Mary Smith', 1],
['Juan Lopez', 5],
['Leslie Liu', 11],
['Tatiana Ivanov', 15],
['Andre Leroy', 11],
['Sam Augusta', 7],
['Adalbert Weber', 1]]
然后:
sorted_lst = [[k,v] for v,k in lst]
sorted_lst.sort()
print(sorted_lst)
您可以直接對partner_compatability
排序
sorted_list = partner_compatability.sort(key=lambda x: x[1])
我嘗試這樣,因為沒有提供列表值
In [67]: a
Out[67]: [8, 9, 3]
In [68]: b
Out[68]: [5, 6, 3]
In [69]: partner_compatability = list(zip(a, b))
In [70]: partner_compatability
Out[70]: [(8, 5), (9, 6), (3, 3)]
In [71]: partner_compatability.sort(key=lambda x: x[1])
In [72]: partner_compatability
Out[72]: [(3, 3), (8, 5), (9, 6)]
根據您的評論,
partner_compatability = [[(1, 'Mary Smith')],
[(5, 'Juan Lopez')],
[(11, 'Leslie Liu')],
[(15, 'Tatiana Ivanov')],
[(11, 'Andre Leroy')],
[(7, 'Sam Augusta')],
[(1, 'Adalbert Weber')]]
partner_compatability.sort(key=lambda x: x[0][0])
In [71]: partner_compatability
Out[71]:
[[(1, 'Mary Smith')],
[(1, 'Adalbert Weber')],
[(5, 'Juan Lopez')],
[(7, 'Sam Augusta')],
[(11, 'Leslie Liu')],
[(11, 'Andre Leroy')],
[(15, 'Tatiana Ivanov')]]
import operator
data = [
['Mary Smith', 1],
['Juan Lopez', 5],
['Leslie Liu', 11],
['Tatiana Ivanov', 15],
['Andre Leroy', 11],
['Sam Augusta', 7],
['Adalbert Weber', 1],
]
data.sort(key = operator.itemgetter(1))
for sub in data:
print(sub)
版畫
['Mary Smith', 1]
['Adalbert Weber', 1]
['Juan Lopez', 5]
['Sam Augusta', 7]
['Leslie Liu', 11]
['Andre Leroy', 11]
['Tatiana Ivanov', 15]
盡管尚不為人所知,但運算符的功能應比等效的lambda更快。 還有attrgetter
。 當鍵應該是多個項目的元組時,都可以使用兩者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.