如何转换元组的输入列表

how to convert input list of tuples

我知道我可以像那样将元组列表转换为字典

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}

但是当我收到用户输入时该怎么办 [("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 转换为字典但不能,因为它的元组列表

首先,将字符串转换为列表,然后您可以像这样进行字典理解:

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'{:}', i)
>>> d = json.loads(j)
>>> d
[{'k': 167}, {'z': 179}, {'u': 179}, {'m': 267}, {'a': 445}, {'l': 134}]

r'\(("\w"), (d+)\)', r'{:}'的解释:

  • \(\) 意思是“阅读开头和括号而不是分组”
  • 常规()是分组选择,可以用\n代替,其中n是组的位置。这在上面的正则表达式中使用了两次,所以我们不会丢失双引号内的文本和每个元组内的数字
  • \w对应代表一个词的字符序列
  • \d+对应一位或多位连续数字

https://docs.python.org/3/library/re.html