代码之家  ›  专栏  ›  技术社区  ›  Mehvix

通过`.join格式化不一致消息时出现问题`

  •  0
  • Mehvix  · 技术社区  · 6 年前

    我想让我的信息看起来像:

    禁止名单:

    用户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)))
    

    这将输出:

    禁止名单:

    @用户1 ID

    @User 1 Name>

    @User 1光盘>

    @用户2 ID

    @User 2 Name>

    @User 2光盘>

    @用户2 ID

    @User 2 Name>

    @User 2光盘>

    3 回复  |  直到 6 年前
        1
  •  1
  •   asinggih    6 年前

    请尝试下面的代码,它不是一个单行程序,但我想它更具可读性

    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)))
    

    好运:)

        2
  •  0
  •   Leekin    6 年前

    您可以尝试以下代码:

    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])))
    
        3
  •  0
  •   AbyxDev user411313    6 年前

    这里有一个单列(ish)解决方案:

    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光盘)

    –User 2 ID(User 2 Name#User 2光盘)

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