我正在嘗試創建一個腳本,它將獲得一個元組,按值和名稱對其進行排序 - 例如,如果我有:
(('apple', 5), ('tv', 500), ('bee', 1000), ('cat', 500))
我希望它回傳:
['蜜蜂','貓','電視','蘋果']
這樣具有最大數字的專案將首先出現,但如果兩個專案具有相同的值,則按字典順序較小的專案將首先出現。這是我的代碼:
def find_k_most_expensive_products(data, k):
executed_file = executeMtmikya(data)
sorted_prices_tup = sorted(executed_file[2], reverse=True, key=lambda element:
(executed_file[2][1], executed_file[2][0]))
best_sellers = []
print("------------")
print("this is the sorted prices_tup: ")
print(sorted_prices_tup)
print("------------")
for i in sorted_prices_tup:
while k > 0:
best_sellers.append(i[1])
print("k is- ")
print(k)
break
k -= 1
return best_sellers
但這是我得到的,因為:
{“蘋果”:“5”,“電視”:“500”,“蜜蜂”:“1000”}
------------
this is the sorted prices_tup:
[('5', 'apple'), ('500', 'tv'), ('1000', 'bee')]
------------
k is-
3
k is-
2
k is-
1
['apple', 'tv', 'bee']
為什么它沒有按預期作業?
uj5u.com熱心網友回復:
當您得到提示時,您需要使用 的key引數sorted。但是,您沒有正確執行此操作,因為您的 lambda 不使用作為引數傳遞的物件。
一種選擇是將數字的反面作為反向排序的第一個鍵,將單詞作為字典排序的第二個鍵:
t = (('apple', 5), ('tv', 500), ('bee', 1000), ('cat', 500))
[x for x,_ in sorted(t, key=lambda x: (-x[1], x[0]))]
輸出:['bee', 'cat', 'tv', 'apple']
uj5u.com熱心網友回復:
嘗試排序:
def sort_by_second(arr):
return sorted(arr, key=lambda x: (-1*x[1],x[0]),reverse=False)
arr = [('apple', 5), ('tv', 500), ('bee', 1000), ('cat', 500)]
print(list(map(lambda x:x[0],sort_by_second(arr))))
輸出:
[bee', 'cat', 'tv', 'apple']
uj5u.com熱心網友回復:
如果您不知道可以對多個鍵進行排序,這是一種替代方法。我先按數字排序,然后在 while 回圈中按單詞排序:
我需要回溯方法來確保所有切換都發生。對不起我的冗長。
def backtrack(i, result):
while i>0:
#print("In backtrack: ", result[i][0],result[i 1][0])
if i-1 > 0 and result[i-1][1] == result[i][1] and result[i-1][0]>result[i][0]:
result[i-1], result[i] = result[i],result[i-1]
i-=1
else:
i-=1
initial = (('apple', 5), ('tv', 500), ('bee', 1000), ('cat', 500))
initial = sorted(initial, key = lambda element: element[1], reverse=True)
result = list(initial)
i=0
while i< len(result)-1:
if result[i][1] == result[i 1][1] and result[i][0]>result[i 1][0]:
result[i], result[i 1] = result[i 1],result[i]
backtrack(i, result)
i =1
else:
i =1
final = [x[0] for x in result]
print(final)
輸出:
['bee', 'cat', 'tv', 'apple']
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420795.html
標籤:
