我正試圖對一個嵌套的串列進行排序。我有一個這樣的輸入檔案:
Mandana,5,7,3,15
ali,19,10,19,6,8,14,3
hamid,3,9,4,20,9,1,8,16,0,5,2,4,7,2,1
sohrab,19,10,19,6,8,14,3
薩拉,0,5,20,14
soheila,13,2,5,1,3,10,12,4,13,17,7,7
nahid,13,2,5,1,3,10,12,4,13,17,7,7
阿里,1,9
sarvin,0,16,16,13,19,2,17,8
sheyda,0,16,16,13,19,2,17,8
當我用函式排序時
def calculate_sorted_averages(input_file_name,output_file_name) 。
with open (input_file_name) as f:
reader=csv.reader(f)
list1=list()
for row in reader:
name=row[0]
these_grade=list()
for grade in row[1:] 。
these_grade.append(float(grade))
avg1=mean(these_grade)
list1.append([name,avg1])
print(list1)
**list1.sort(key=lambda x: (int(x[1]), x[0]) **)
print(list1)
with open (output_file_name,'w',newline=' ' ) as outp:
writer = csv.writer(outp)
for item in list1:
writer.writerow(item)
outp.close()
輸出檔案是。
ali,5.0
hamid,6.066666666666666
Mandana,7.5
nahid,7.833333333333333
soheila,7.833333333333333
薩拉,9.75
ali,11.285714285714286
SARVIN,11.375
Sheyda,11.375
sohrab,11.285714285714286
Sohrab在排序中不是真的。但當我改變Sohrab的名字,例如Nima,排序是真的。 我怎樣才能解決這個問題呢?
uj5u.com熱心網友回復:
你的排序鍵是一個元組:
你的排序鍵是一個元組。
lambda x: (int(x[1]), x[0] )
通過轉換為int,你使幾個值具有相同的主鍵,這意味著它們被按次要鍵,即它們的名字來排序。也就是說,你生成了四個圖元:
(11, "ali")
(11, "sarvin")
(11, "sheyda")
(11, "sohrab")
它們都有相同的主值(11),所以它們被作為次要鍵按字母排序。
移除int()并按(x[1], x[0])進行排序應該可以得到你想要的結果。
uj5u.com熱心網友回復:
下面的方法似乎可以作業。你通過新的行來分割資料,每一行你都分割到名字和數字。你計算每個人的平均數,并將這對人 平均數累積到一個串列中。最后一步是按照平均值對這對資料進行排序。
import statistics
data = ''mandana,5,7,3,15
ali,19,10,19,6,8,14,3
hamid,3,9,4,20,9,1,8,16,0,5,2,4,7,2,1
sohrab,19,10,19,6,8,14,3
Sara,0,5,20,14
soheila,13,2,5,1,3,10,12,4,13,17,7,7
nahid,13,2,5,1,3,10,12,4,13,17,7,7
Ali,1,9
sarvin,0,16,16,13,19,2,17,8
sheyda,0,16,16,13,19,2,17,8'''
lines = data.split('
')
new_lines = []
for line in lines:
fields = line.split(',')
new_lines.append((fields[0],statistics.mean(int(x) for x in fields[1: ] ) )
new_lines = sorted(new_lines,key= lambda x: x[1] )
for line in new_lines:
print(line)
輸出
('ali', 5)
('hamid', 6.0666666666666)
('mandana', 7.5)
('soheila', 7.833333333)
('nahid', 7.833333333)
('sara', 9.75)
('ali', 11.285714285714286)
('sohrab', 11.2857145714286)
('sarvin', 11.375)
('sheyda', 11.375)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/325708.html
標籤:
