我正在使用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中的单引号值?
答案 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
的所有功能。