Python 如何从列表转换为字典

Python 如何从列表转换为字典,python,list,dictionary,Python,List,Dictionary,我之前一直在与列表一起工作,如果嵌入超过900个字符,我会添加一个新的discord嵌入列(discord的限制为1020,由于限制,上面的所有内容都会抛出错误),这意味着一旦达到900,它应该创建一个新的嵌入列,如下图所示 我现在的代码示例是将字符限制设置为10,这意味着如果我们总共达到10个字符,它将为每达到10个字符创建新列 以前使用列表工作的代码: payload = ["40 - (8)", "41 - (14)", "42 - (4

我之前一直在与列表一起工作,如果嵌入超过900个字符,我会添加一个新的discord嵌入列(discord的限制为1020,由于限制,上面的所有内容都会抛出错误),这意味着一旦达到900,它应该创建一个新的嵌入列,如下图所示

我现在的代码示例是将字符限制设置为10,这意味着如果我们总共达到10个字符,它将为每达到10个字符创建新列

以前使用列表工作的代码:

payload = ["40 - (8)", "41 - (14)", "42 - (45)", "43 - (10)", "44 - (11)", "45 - (23)", "46 - (74)"]

characterCount, i = 0, 0
for j, item in enumerate(payload):

    if len(item) + characterCount > 900:
        # Embed.add_embed field is to createa embed to discord.
        embed.add_embed_field(
            name="Sizes",
            value="\n".join(payload[i:j])
        )
        characterCount, i = len(item), j
    else:
        characterCount += len(item)

if characterCount:
    embed.add_embed_field(
        name="Sizes",
        value="\n".join(payload[i:])
    )
输出打印:请参见顶部的图像:


然而,列表ss的问题是,我已经将键:值硬编码到一个列表中,我对此不太满意,因为dict是一个更好的解决方案。现在,我已将列表转换为dict:

payload = {"40": 8, "41": 14, "42": 45, "43": 10, "44": 11, "45": 23, "46": 74}

characterCount, i = 0, 0
for j, item in enumerate(payload):

    if len(item) + characterCount > 900:
        print("\n".join(payload[i:j]))
        characterCount, i = len(item), j
    else:
        characterCount += len(item)

if characterCount:
    print("\n".join(payload[i:]))
但它抛出了一个错误:

TypeError: unhashable type: 'slice'

正如我所知,我们无法获取索引并对dict进行切片。我的问题是,每次使用dict总共超过900个字符时,如何创建新的discord嵌入列?

如果您想要词典切片,可以通过从
items()
方法中的键值对创建一个列表来获得它

print("\n".join([f'{key} - ({val})' for key, val in payload.items()][i:]))

# output:
# 40 - (8)
# 41 - (14)
# 42 - (45)
# 43 - (10)
# 44 - (11)
# 45 - (23)
# 46 - (74)
试试这个:

payload = ["40 - (8)", "41 - (14)", "42 - (45)", "43 - (10)", "44 - (11)", "45 - (23)", "46 - (74)"]

dd = dict()

for i in payload:
    splitted = i.split("-")
    splitted = [i.strip() for i in splitted]
    dd[splitted[0]] = splitted[1]

print(dd)

如果将其改写为纯python问题,您可能会得到更多答案。感觉答案可能很简单,但很难理解问题的意图。我将尝试添加更多的上下文,即使我不确定是什么,也许你可以说你可能不太理解的部分,我可以尝试改进它:DPlease@tripleee我之所以放一张just embed的图片,是为了直观地告诉你discord embed是如何做的,以便更好地了解它。在图像中,我粘贴了基本上代表图像结果的代码。这不是比完全不做更好吗?这确实是我想要的!看起来我能够使用
[I:]和[I:j]
的索引,非常漂亮所以我猜你基本上是将它创建为一个列表?我不确定list items()给出的顺序是否总是与dict定义的顺序相同。我认为这是特定于Python实现的?@Bemmu是的,dictionary保留了自Python 3.6以来的插入顺序