2016-10-25 67 views
1

我是什麼後:的而不是像這樣的列表輸出:
['test1', 'test2', test3']刪除括號[]從列表(同時與關鍵排序)

我會希望它的輸出是這樣的:
test1 | test2 | test3或者這是也沒關係test1, test2, test3

我的代碼:現在這是怎麼樣子:

deelnemers = [] 
# i add name, csgo and score to deelnemers[] via class Deelnemer 
    deelnemers.append(Deelnemer(naam, int(csgo), int(score))) 

    # key to sort it by csgo value 
    def keyCSGO(deelnemer): 
      return deelnemer.csgo 

    # i print it in reverse so the highest csgo number will be first 
    print("\nNaam | CSGO Score\n----------------\n", sorted(deelnemers, key=keyCSGO, reverse=True)) 

我曾嘗試:

print(", ".join("\nNaam | CSGO Score\n----------------\n", sorted(deelnemers, key=keyCSGO, reverse=True))) 

如此明顯的上面讓你只能有1。加入參數:join() takes exactly one argument (2 given)

所以我刪除了NAAM | CSGO部分測試一下:

print(", ".join(sorted(deelnemers, key=keyCSGO, reverse=True))) 

,但現在我得到這個異常:sequence item 0: expected str instance, Deelnemer found

我覺得我是找錯了方向,所以我不知道在哪裏看有[「」 ]從列表中刪除。感謝您的幫助和建議。

+1

附註:您不需要爲簡單的屬性查找編寫自己的函數。 'from operator import attrgetter',然後用'key = attrgetter('csgo')'替換'key = keyCSGO'。推動更多的工作到C層,更靈活(通過第二個字段進行排序,使其成爲'attrgetter('csgo','secondattrname')')等。 – ShadowRanger

回答

1

只能加入串,所以你可能需要後訪問name屬性的每個實例(假設它是什麼)排序在join使用它們:

print(", ".join(d.name for d in sorted(deelnemers, key=keyCSGO, reverse=True))) 

你也可以把一個字符串的屬性使用字符串格式化(學分@Tadhg)加盟之前:

", ".join("{0.name} {0.csgo} {0.score}".format(d) for d in sorted(deelnemers, key=keyCSGO, reverse=True)) 
+0

只使用問題中的信息,您甚至不能確定'Deelnemer'對象是否具有'.name'屬性,只是聲明爲每個對象獲取字符串表示形式的邏輯會更有用你現在有'd.name'。對我來說最明顯的解決方案是'str(d)'。 –

+0

是否有可能有更多的字符串像d.name?可以說我想要d.name,d.csgo。所以,而不是隻有1個屬性,我給2或3.我的意思是這樣的:'print(「,」.join(d.name,d.csgo,d.score for d in sort(deelnemers,key = keyCSGO, reverse = True)))' – SunnlightBro

+0

@FatalRein處理字符串與使用print函數不同,print函數將所有內容都轉換爲字符串並添加分隔符,如果您想自己處理該部分,則需要執行類似於'「,」.join(「{0.name} {0.csgo} {0.score}」。格式(d)對於排序後的(deelnemers,key = keyCSGO,reverse = True)' –

2

str.join只能加入字符串。希望在Deelnemer類有定義的__str__方法,那麼你可以做:

print("Naam | CSGO Score\n----------------") 
print(", ".join(map(str, sorted(deelnemers, key=keyCSGO, reverse=True)))) 
+0

所以,我的課有一個__ init __和__ repr __定義。我只是添加__ str __與名稱,csgo,分數屬性?對不起,如果這是一個愚蠢的問題。 – SunnlightBro

+0

這取決於你想要在表中列出的。名字?然後你可以做什麼摩西Koledoye建議,或使'__str__'返回'self.name'。還有別的嗎?然後返回,只要確保它是一個正在返回的字符串。 – L3viathan

+0

我想返回名稱,csgo或名稱| csgo(類似這樣的) – SunnlightBro

2

替代使用str.join的是讓print爲你做更多的工作;很高興將字符串化和插入分隔符:

from operator import attrgetter 

# Print header normally, but let print handle the newlines and separate lines 
# so alignment of header and bar more obvious 
# You original code was one hyphen short (which I fixed) 
print("Naam | CSGO Score", 
     "-----------------", sep="\n") 

# Use *-unpacking to convert sorted list to sequential positional arguments 
# and pass sep=', ' to replace default sep of ' '. 
# Use attrgetter instead of rolling your own key function 
print(*sorted(deelnemers, key=attrgetter('csgo'), reverse=True), sep=', ')