代码之家  ›  专栏  ›  技术社区  ›  mooglinux

.jjoin()保持引用字典值

  •  0
  • mooglinux  · 技术社区  · 10 年前

    我正在使用Python 3.4,并组装一个url来请求一个json对象。但是我在使用.jjoin()函数将字典中的key:value对添加到字符串中时遇到了问题:

    params = {'name.first_lower' : 'characterName'}
    
    print("/".join("{!s}={!r}".format(key,val) for (key, val) in params.items())
    

    我需要的是它返回这个:

    name.first_lower=characterName
    

    但我得到的是:

    name.first_lower='characterName'
    

    为什么.jjoin()或.format()为我提供dict中的单引号?

    2 回复  |  直到 10 年前
        1
  •  3
  •   user2555451 user2555451    10 年前

    这个 !r 格式代码调用对象的 __repr__ method ,它会自动添加引号。您想使用 !s 格式代码,调用 __str__ 方法:

    >>> params = {'name.first_lower' : 'characterName'}
    >>> print("/".join("{!s}={!s}".format(key,val) for (key, val) in params.items()))
    name.first_lower=characterName
    >>>
    

    然而,请注意 !s 不需要,因为它是默认格式代码:

    >>> print("/".join("{}={}".format(key,val) for (key, val) in params.items()))
    name.first_lower=characterName
    >>>
    
        2
  •  1
  •   Bakuriu    10 年前

    这与 join() 方法,但使用 format 方法 你告诉他这样做 !r 格式说明符。使用 !s 或者什么都不做:

    In [1]: '{} = {}'.format('name.first_lower', 'characterName')
    Out[1]: 'name.first_lower = characterName'
    In [2]: '{!s} = {!s}'.format('name.first_lower', 'characterName')
    Out[2]: 'name.first_lower = characterName'
    

    考虑阅读 Format Specification Mini-Language 学习 str.format .