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)设置正确的字符串格式;最后加入他们