我正在尝试创建一个python脚本,在每次迭代时从dict中的列表中选择下一个项目,并用当前项目替换文本中的键。但问题是,它不会返回与变量设置的整数匹配的列表项。
代码:
for x in range(0,runs):
for k,v in shortcodes.iteritems():
description = description.replace('{'+k+'}', v[x])
print description
只需继续使用 first 列表项替换文本中的键值,而不是递增。如果我手动删除x
并将其设置为更高的整数,则它会正确响应。同样,为了理智,打印x
确认x
正在增加。
那么,为什么它会忽略x
并继续0
?
答案 0 :(得分:1)
在您的代码中,for循环仅在第一次迭代时替换关键字。所有其他迭代都没有要替换的关键字,因为你已经用你的valueitem的第一个元素替换了它们。
我认为更有希望的解决方案是这样的
for k,v in shortcodes.iteritems():
for x in v:
index = description.find('{'+k+'}')
description[index:index+len('{'+k+'}')] = description[index:index+len('{'+k+'}')].replace('{'+k+'}', x)
print description
现在你为每个键迭代你的价值主义者,而不是相反,
并且由于您希望使用anoter值更改每个关键字,因此您只需替换要更改的子字符串。使用find()
,您将获得实际字符串中子字符串的最低索引的位置。并使用len()
获得参数值的长度