我是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
有人能帮帮我吗?非常感谢你!
答案 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 %}
循环应该是一个接一个,而不是一个在另一个内部。