通过.join格式化Discord消息时出现问题

时间:2018-07-31 04:00:40

标签: python string python-3.x discord discord.py

我正在尝试使消息看起来像这样:

  

禁令列表:

     

•用户1 ID(用户1名称#用户1标识符)

     

•用户2 ID(用户2名称#用户2区分符)

     

•用户3 ID(用户3名称#用户3区分符)

我已经以列表格式获取了用户的ID,名称和区分符,但我不知道如何正确设置其格式。我已经纠结了.format.join一段时间了,但是在没有每个数据都换行的情况下,我想不出如何以正确的顺序获取它。

作为参考,这是我的代码现在的样子:

userid = ['User 1 ID', 'User 2 ID', 'User 3 ID']
name = ['User 1 Name', 'User 2 Name', 'User 3 Name']
discriminator = ['User 1 Disc', 'User 2 Disc', 'User 3 Disc']

total = list(chain.from_iterable(zip(userid, name, discriminator)))


await client.send_message(message.channel, "**Ban List:** \n •<@{}>".format(">\n• <@".join(total)))

这将输出:

  

禁令列表:

     

•@User 1 ID

     

•<@用户1名称>

     

•<@用户1光盘>

     

•@User 2 ID

     

•<@用户2名称>

     

•<@用户2光盘>

     

•@User 2 ID

     

•<@用户2名称>

     

•<@用户2光盘>

3 个答案:

答案 0 :(得分:1)

在下面尝试以下代码,它不是一个单一的代码,但我想它更易读

userid = ['User 1 ID', 'User 2 ID', 'User 3 ID']
name = ['User 1 Name', 'User 2 Name', 'User 3 Name']
discriminator = ['User 1 Disc', 'User 2 Disc', 'User 3 Disc']

total = list((zip(userid, name, discriminator)))

# reformat the code into the desired formatting
pretty_list = set()
for details in total:
    data = "•<@{} ({}#{})>".format(details[0], details[1], details[2]) 
    pretty_list.add(data)

# debug print below
# print("**Ban list:** \n{}".format("\n".join(pretty_list)))

await client.send_message(message.channel, "**Ban list:** \n{}".format("\n".join(pretty_list)))

好运:)

答案 1 :(得分:0)

您可以尝试以下代码:

userid = ['User 1 ID', 'User 2 ID', 'User 3 ID']
name = ['User 1 Name', 'User 2 Name', 'User 3 Name']
discriminator = ['User 1 Disc', 'User 2 Disc', 'User 3 Disc']

total = zip(userid, name, discriminator)

await client.send_message(message.channel, "**Ban List:** \n{}".format("\n".join(["• {}".format(" ".join(list(item))) for item in total])))

答案 2 :(得分:0)

这是一种单线解决方案:

userid = ['User 1 ID', 'User 2 ID', 'User 3 ID']
name = ['User 1 Name', 'User 2 Name', 'User 3 Name']
discriminator = ['User 1 Disc', 'User 2 Disc', 'User 3 Disc']

#convert [['a1', 'a2'], ['b1', 'b2']] to iter([('a1', 'b1'), ('a2', 'b2')])
total = zip(userid, name, discriminator)

await client.send_message(message.channel, "**Ban List:**\n"
                          + "\n".join("• {} ({}#{})".format(*i) for i in total))

输出应为:

  

禁令列表:

     

•用户1 ID(用户1名称#用户1光盘)

     

•用户2 ID(用户2名称#用户2光盘)

     

•用户3 ID(用户3名称#用户3光盘)