Python:备用V的字典

2024-05-14 08:39:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python和编程还不熟悉。我在做Pyschool练习第8题第11题关于将字典转换为备用向量机。在

我被要求写一个函数,将字典转换回它的sparese向量表示。在

示例

>>> convertDictionary({0: 1, 3: 2, 7: 3, 12: 4})
[1, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 4]
>>> convertDictionary({0: 1, 2: 1, 4: 2, 6: 1, 9: 1})
[1, 0, 1, 0, 2, 0, 1, 0, 0, 1]
>>> convertDictionary({})
[]

我试过很多次。以下是我的最新代码:

^{pr2}$

返回的错误是:

Traceback (most recent call last):
File "Code", line 8, in convertDictionary
IndexError: list assignment index out of range

有人能帮我吗?非常感谢你!在


Tags: 函数代码示例most字典编程错误call
2条回答

这样的话就足够了:

M = max(dictionary, default=0)
vector = [dictionary.get(i, 0) for i in range(M)]

翻译成一个简单的旧for循环

^{pr2}$

get方法允许您提供一个默认值作为第二个参数,以防密钥丢失。一旦你得到更多的进展,你可以使用defaultdict

Edit:max的默认参数需要Python>;3.4。如果您有早期版本,您可以使用异常处理(通常首选)或显式检查空字典来处理这种情况。在

您的代码在逻辑上运行得很好,但是存在缩进问题。你的职能应该是:

def convertDictionary(dictionary):
    k=dictionary.keys()
    v=dictionary.values()
    result=[]
    for i in range(0,max(k)):
        result.append(0)
    for j in k:
        result[j]=v[k.index(j)]
    return result

问题是你的第二个for在第一个里面。您需要的是用max(k)元素构建一个列表,然后将正确的值放入其中。然后,两个for循环应该是一个接一个,而不是一个在另一个内部。在

相关问题 更多 >

    热门问题