所以我有一些代码来制作模块,我需要帮助利用其中包含 .replace()
的 for
循环。
问题是,当我循环 variables
并使用 .replace(k, v)
时,我的代码只会将最后一个键替换为与字典中的最后一个值匹配的值。这使得输出中留下的所有先前的键都不会被替换为它们的匹配值...我需要将每个键替换为每个值,并且只有通过执行字典中的最后一个键才会符合要求
variables = {'font1': 'Harlow Solid', 'grey': '#454545', 'font2': 'mistral'}
style_sheet ='''/* Pyle Sheets */
hashone{
font: Italic 70px font1;
}
hashtwo{ # scroll down to see 'for' loop in question
font: bold 45px font2; # scroll down to see 'for' loop in question
}
hashthree{
font: Italic 25px Harlow Solid;
}
dotsample{
text-align: center;
}
hashbodyid{
background: grey;
}
'''
replace_num = len(variables.keys()) # <--for loop/.replace(k, v) function
for k, v in variables.items(): # <--for loop/.replace(k, v) function
content = style_sheet.replace(k, v, replace_num) # <--- here it is...
looped_content = str(content)
id_content = looped_content.replace("hash", "#")
clss_idContent = id_content.replace("dot", ".")
#------------
print(clss_idContent) # view output
最佳答案
您的代码中存在逻辑错误。让我们分析您的代码。
假设 style_sheet
等于 aabbcc
,并且 variables
等于 {"a": 1, "b": 2, “c”:3}
。
循环期间会发生什么?
第一个循环:content = "aabbcc".replace("a", 1, 3)
,因此content = "11bbcc"
。
第二个循环:content = "aabbcc".replace("b", 2, 3)
,因此content = "aa22cc"
。
最后一个循环:content = "aabbcc".replace("c", 3, 3)
,所以content = "aabb33"
。
那么你注意到关键点在哪里了吗?
您也应该在每个循环期间更新原始字符串!
您可以更改代码,如下所示:
content = style_sheet
for k, v in variables.items():
content = content.replace(k, v, replace_num) #update original string
关于Python - For循环不会用它的匹配值替换每个字典键...仅与字典中的最后一个键和值合作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46678220/