如何将字典转换为关键字参数字符串?
Posted
技术标签:
【中文标题】如何将字典转换为关键字参数字符串?【英文标题】:how can I convert a dictionary to a string of keyword arguments? 【发布时间】:2011-02-17 15:30:38 【问题描述】:我们可以使用**kw
将字典转换为kw
,但如果我想将kw
转换为str(kw)
而不是str(dict)
,
因为我想要一个带有 code_generator 关键字参数的字符串,
如果我通过了
obj.method(name='name', test='test', relation = [('id','=',1)])
我想要一个函数来返回像
这样的字符串"name='name', test='test', relation = [('id','=',1)]"
【问题讨论】:
【参考方案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())
请注意,dicts 是任意排序的,因此结果字符串的顺序可能与传递的参数不同。
【讨论】:
注意.iteritems()
是 Python 2 语法;在 Python 3 中是.items()
。见***.com/a/10458567/4115031
使用 f 字符串更新 Python3:", ".join(f'x[0]=x[1]!r' for x in kwargs.items())
", ".join(f"key=value" for key, value in kwargs.items())
可能更加 Pythonic。【参考方案2】:
上面的答案在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) 格式化正确的字符串格式;最后加入他们以上是关于如何将字典转换为关键字参数字符串?的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫编程思想(80): 将类实例转换为JSON字符串
Python爬虫编程思想(80): 将类实例转换为JSON字符串
Python爬虫编程思想(79): 将JSON字符串转换为类实例