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

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字符串转换为类实例

Python爬虫编程思想(79): 将JSON字符串转换为类实例

如何将字符串转换为日期 pandas python TypeError:strptime() 不接受关键字参数