.join()继续引用字典值

时间:2014-07-14 19:22:33

标签: python string join dictionary format

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

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'

为什么.join()或.format()给出了dict中的单引号值?

2 个答案:

答案 0 :(得分:3)

!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
>>>

答案 1 :(得分:1)

这与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的所有功能。