Python嵌套F-string引用问题:动态生成DataFrame行描述
问题分析与解决方案
问题根源
你这么写的核心问题是:attempt是提前拼接好的静态字符串,里面的{df[i][j]}只是普通字符,外层的F-string不会去解析这个字符串变量里的占位符。F-string的表达式解析是在定义时完成的,当你把attempt放进外层F-string时,它只会直接输出attempt的字面内容,不会再识别里面的大括号表达式。
正确实现方式
方式一:遍历行时动态拼接列值(推荐)
直接在每行的循环里,根据列名列表获取对应值再拼接,逻辑清晰且安全:
list_a = ['a', 'b', 'c'] desc = "\n".join( [ f"- {' | '.join(df.iloc[i][col] for col in list_a)} | plus some additional text here" for i in df[0:3].index ] )
方式二:用format方法结合字典解包
先构建带列名占位符的模板,再把每行数据转成字典传入format:
list_a = ['a', 'b', 'c'] # 生成"{a} | {b} | {c} | plus some additional text here"格式的模板 template = ' | '.join(f"{{{col}}}" for col in list_a) + " | plus some additional text here" desc = "\n".join( [ f"- {template.format(**df.iloc[i].to_dict())}" for i in df[0:3].index ] )
方式三:模板字符串+eval(不推荐)
如果一定要用预定义模板的思路,可以用eval求值,但要注意安全风险(仅适用于完全可控的输入场景):
list_a = ['a', 'b', 'c'] # 生成"df.iloc[i]['a'] | df.iloc[i]['b'] | df.iloc[i]['c']"格式的模板字符串 template = ' | '.join(f"df.iloc[i]['{col}']" for col in list_a) desc = "\n".join( [ f"- {eval(template)} | plus some additional text here" for i in df[0:3].index ] )
内容的提问来源于stack exchange,提问作者acrobaticrock
相关产品推荐
相关产品推荐

