2016-10-25 37 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=', ')