Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-For循环不会用它替换每个字典键';s匹配值。。。只为最后一把钥匙和;字典中的值_Python_Css_Dictionary_For Loop - Fatal编程技术网

Python-For循环不会用它替换每个字典键';s匹配值。。。只为最后一把钥匙和;字典中的值

Python-For循环不会用它替换每个字典键';s匹配值。。。只为最后一把钥匙和;字典中的值,python,css,dictionary,for-loop,Python,Css,Dictionary,For Loop,因此,我有一些代码来制作一个模块,我需要帮助利用for循环中的.replace()。 问题是,当我在变量中循环,并使用.replace(k,v)时,我的代码只会用字典中匹配的最后一个值替换最后一个键。这将在输出中保留所有以前的关键点,而不替换为它们的匹配值。。。我需要用每一个值替换每一个键,它只需要执行dict中的最后一个键就可以了 variables = {'font1': 'Harlow Solid', 'grey': '#454545', 'font2': 'mistral'} styl

因此,我有一些代码来制作一个模块,我需要帮助利用
for
循环中的
.replace()
。 问题是,当我在
变量中循环,并使用
.replace(k,v)
时,我的代码只会用字典中匹配的最后一个值替换最后一个键。这将在输出中保留所有以前的关键点,而不替换为它们的匹配值。。。我需要用每一个值替换每一个键,它只需要执行dict中的最后一个键就可以了

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
variables={'font1':'Harlow Solid','grey':'#454545','font2':'mistral'}
样式表='''/*派尔表*/
哈松{
字体:斜体70px字体1;
}
hashtwo{#向下滚动查看有问题的'for'循环
字体:粗体45px font2;#向下滚动查看相关的“for”循环
}
哈什三{
字体:斜体25px哈洛立体;
}
点样{
文本对齐:居中;
}
哈什博迪德{
背景:灰色;
}
'''

replace_num=len(variables.keys())#您在循环中一次又一次地覆盖
内容
,而替换的源字符串(
样式表
)没有更改。

代码中存在逻辑错误。让我们分析一下你的代码

假设
样式表
等于
aabbcc
变量
等于
{“a”:1,“b”:2,“c”:3}

循环期间会发生什么

第一个循环:
content=“aabbcc”。替换(“a”,1,3)
,因此
content=“11bbcc”

第二个循环:
content=“aabbcc”。替换(“b”,2,3)
,因此
content=“aa22cc”

最后一个循环:
content=“aabbcc”。替换(“c”,3,3)
,因此
content=“aabb33”

那么你注意到关键点在哪里了吗

您应该在每次循环期间更新原始字符串

您可以按如下方式更改代码:

content = style_sheet
for k, v in variables.items():
    content = content.replace(k, v, replace_num)  #update original string

如果问题与保存到文件无关,请从代码中删除它。顺便说一句,
内容在每次迭代后都会被覆盖…我想我会把它留给整个文件作为参考,但事后看来这是一个更好的主意。所以本质上,我只需要在最后中断它?不,这只是得到了第一个工作键。。。这是愚蠢的,显然它只会做一次迭代。。。我算出了,我相信我需要添加一个不等式,如果变量replace_num大于零,那么我需要添加一个不等式来运行循环,然后添加-=1,这样每次迭代的值都会下降一。。。将更新…你是一个圣人和学者我的朋友。。。非常感谢