Python:字体备用矢量

时间:2016-12-02 00:57:41

标签: python dictionary

我是Python和编程的新手。我正在研究Pyschool练习题目8,Q 11将字典转换为Spare Vectore。

我被要求编写一个将字典转换回其备用矢量表示的函数。

实施例

>>> 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({})
[]

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

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

返回的错误是:

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

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

2 个答案:

答案 0 :(得分:0)

这样的事情应该足够了:

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

翻译成普通的for-loop

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

get方法允许您在缺少密钥时提供默认值作为第二个参数。一旦你获得更多进步,你可以使用defaultdict

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

答案 1 :(得分:0)

您的代码在逻辑上很好,但是您有缩进问题。你的功能应该是:

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元素的列表,然后将正确的值放入其中。然后,两个{% if product.metafields.review == true %} ... {% endif %} 循环应该是一个接一个,而不是一个在另一个内部。