如何转换元组的输入列表



我知道我可以将元组列表转换为类似的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

最新更新