Python 如何将字典转换为关键字参数字符串?
我们可以使用Python 如何将字典转换为关键字参数字符串?,python,string,dictionary,keyword-argument,Python,String,Dictionary,Keyword Argument,我们可以使用**kw将字典转换为kw,但是如果我想kw作为str(kw)而不是str(dict),那么, 因为我想要一个带有关键字参数的字符串作为代码生成器 如果我通过 obj.method(name='name', test='test', relation = [('id','=',1)]) 我想要一个返回字符串的函数,比如 "name='name', test='test', relation = [('id','=',1)]" 相同的语法用于接受任意关键字参数 Python 2: d
**kw
将字典转换为kw
,但是如果我想kw
作为str(kw)
而不是str(dict)
,那么,
因为我想要一个带有关键字参数的字符串作为代码生成器
如果我通过
obj.method(name='name', test='test', relation = [('id','=',1)])
我想要一个返回字符串的函数,比如
"name='name', test='test', relation = [('id','=',1)]"
相同的语法用于接受任意关键字参数 Python 2:
def somestring(**kwargs):
return ', '.join('%s=%r' % x for x in kwargs.iteritems())
Python 3:
def somestring(**kwargs):
return ", ".join(f"{key}={value}" for key, value in kwargs.items())
请注意,dict是任意排序的,因此结果字符串的顺序可能与传递的参数的顺序不同。上面的答案不能在python 2.7.16上正确运行,应该是
def somestring(**kwargs):
return ''.join([('%s=%s' % x) for x in kwargs.iteritems()])
#A full example:
def RunCommandAndEnsureZero(*args, **kwargs):
retCode = RunCommand(*args, **kwargs)
if retCode != 0:
kwargsString = ''.join([('%s=%s' % x) for x in kwargs.iteritems()])
raise Exception("error command: \"%s %s\"" % (''.join(args), kwargsString))
注意
.iteritems()
是Python 2语法;在Python3中,它是.items()
。请参阅Python3使用f字符串更新:“,”.join(f'{x[0]}={x[1]!r}表示kwargs.items()中的x)
”,“.join(f'{key}={value}”表示键,kwargs.items()中的值可能更像Pythonic.use[]让生成器运行;然后使用(“%s=%s”%x)设置正确的字符串格式;最后加入他们