【问题标题】: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)]"

【问题讨论】:

    标签: python string dictionary keyword-argument


    【解决方案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()。见stackoverflow.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) 格式化正确的字符串格式;最后加入他们
    猜你喜欢
    • 1970-01-01
    • 2014-06-24
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2019-11-09
    • 1970-01-01
    相关资源
    最近更新 更多