如何将字典转换为关键字参数的字符串?

7
我们可以使用** kw将字典转换为kw,但是如果我想要kw作为str(kw)而不是str(dict),因为我想要一个带有关键字参数的字符串给code_generator
如果我通过
obj.method(name='name', test='test', relation = [('id','=',1)])

I want a function to return the string like

"name='name', test='test', relation = [('id','=',1)]"
2个回答

13

相同的语法用于接收任意关键字参数。

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())

请注意,字典的顺序是任意的,因此结果字符串可能与传递的参数顺序不同。


3
注意:.iteritems()是Python 2的语法;在Python 3中应使用.items()。参见https://dev59.com/QWkv5IYBdhLWcg3wpCQz#10458567 - Nathan Wailes
2
Python3更新,使用f-strings:", ".join(f'{x[0]}={x[1]!r}' for x in kwargs.items()) - James Owers
2
使用 ", ".join(f"{key}={value}" for key, value in kwargs.items()) 或许更符合 Python 风格。 - cbrnr

1
上面的答案在 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))

使用[]让生成器运行;然后使用("%s=%s" %x)进行正确的字符串格式化;最后将它们连接起来。 - Alen Wesker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接