我知道我可以将元组列表转换为类似的dict
list_of_tuples = [("k", 167), ("z", 179), ("u", 179), ("m", 267), ("a", 445), ("l", 134)]
new_dict = {}
new=dict{list_of_tuples}
print(new)
#{'k': 167, 'z': 179, 'u': 179, 'm': 267, 'a': 445, 'l': 134}
但是当我得到用户INPUTS这个时该怎么办[("k", 167), ("z", 179), ("u", 179), ("m", 267), ("a", 445), ("l", 134)]
作为字符串
什么用户在行中取消剪切为字符串
([("k", 167), ("z", 179), ("u", 179), ("m", 267), ("a", 445), ("l", 134)])
我试着用Json转换成dict,但不能,因为它的元组列表
首先,将字符串转换为列表,然后可以像这样进行字典理解:
import ast
my_list = ast.literal_eval("[("k", 167), ("z", 179), ("u", 179), ("m", 267), ("a", 445), ("l", 134)]")
d = {k:v for k,v in my_list}
使用正则表达式将元组内的(
、,
和字符串中的)
分别替换为{
、:
和}
。
>>> i = '[("k", 167), ("z", 179), ("u", 179), ("m", 267), ("a", 445), ("l", 134)]'
>>> j = re.sub(r'(("w"), (d+))', r'{1:2}', i)
>>> d = json.loads(j)
>>> d
[{'k': 167}, {'z': 179}, {'u': 179}, {'m': 267}, {'a': 445}, {'l': 134}]
r'(("w"), (d+))', r'{1:2}'
:解析
- CCD_ 9和CCD_;读取左括号而不是分组">
- 规则的
(
和)
是可以在n
的替换中使用的分组选择,其中n
是组的位置。这在上面的正则表达式中使用了两次,所以我们不会丢失双引号中的文本和每个元组中的数字 w
对应于表示一个单词的字符序列d+
对应一个或多个连续数字
https://docs.python.org/3/library/re.html