将字符串转为字典
在工作中遇到一个小问题,需要将一个 python 的字符串转为字典,比如字符串:
user_info = '{"name" : "john", "gender" : "male", "age": 28}'
我们想把它转为下面的字典:
user_dict = {"name" : "john", "gender" : "male", "age": 28}
使用 ast.literal_eval 进行转换
import ast
user = '{"name" : "john", "gender" : "male", "age": 28}'
user_dict = ast.literal_eval(user)
user_dict
{'gender': 'male', 'age': 28, 'name': 'john'}
user_info = "{'name' : 'john', 'gender' : 'male', 'age': 28}"
user_dict = ast.literal_eval(user)
user_dict
{'gender': 'male', 'age': 28, 'name': 'john'}
拼接字符串
- 描述
str.join()方法是Python的字符串方法,用于将序列中的元素以指定的字符串连接成一个新的字符串。
- 语法
string.join(sequence)
名称 | 说明 | 备注 |
---|---|---|
string | 字符串连接符 | 可省略 |
sequence | 要连接的元素序列 | 不可省略的参数,序列的元素是字符串 |
- 举例
- 元素序列是列表
a = '!@'.join(['Fusion', 'Sphere', 'Cloud'])
a
'Fusion!@Sphere!@Cloud'
- 元素序列是元组
" ".join(('China', 'Japan', 'USA', 'UK'))
'China Japan USA UK'
- 元素序列是集合
''.join({'C', 'h', 'i', 'n', 'a'})
'ahCni'
可以看出,输出的字符顺序与集合中元素的顺序不是保持一致的。
- 元素序列是字典
' ~ '.join({'Asia':'China', 'Europe':'UK'})
'Asia ~ Europe'
可以看出,如果序列是字典,拼接的字符是字典的键。
- 元素序列是字符串
当元素序列仅仅是字符串时,join函数会将字符串中的每一个单个字符抽取出来,与连接符组合。
', '.join('happy')
'h, a, p, p, y
- 注意事项
- 要连接的字符串序列(参数)必须是字符串
join函数的参数应该是全部由字符串构成的可迭代对象。当可迭代对象不全是由字符串构成的时,Python会报错TypeError。 - 字符串连接符可省略
字符串连接符可以省略(空字符串)。当字符串连接符为空时,序列中的所有字符串都将连接成一个字符串。 - join()方法和 + 号都可以拼接字符串,但是join拼接速度更快
那么为什么使用join()方法时间会更快一些呢?
因为在Python中字符串是不可变对象,修改字符串就得将原字符串中的值复制,开辟一块新的内存,加上修改的内容后写入到新内存中,以达到“修改”字符串的效果。在使用“+”拼接字符串时,正是使用了重复性的复制、申请新内存、写入值到新内存的工作一遍遍的将字符串的值修改。而使用join()方法拼接字符串时,会先计算总共需要申请多少内存,然后一次性申请所需内存并将字符串复制过去。这样便省去了重复性的内存申请和写入,节省了时间消耗。