【问题标题】:how to convert input list of tuples如何转换元组的输入列表
【发布时间】:2022-01-22 14:48:01
【问题描述】:

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

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 转换为 dict,但不能因为它的元组列表

【问题讨论】:

  • 从用户输入中你只能得到一个字符串而不是一个元组列表。
  • 您可能想澄清您是否收到像'[("k", 167), ("z", 179), ("u", 179), ("m", 267), ("a", 445), ("l", 134)]' 这样的单个字符串或您的问题。
  • 是用户输入这个 [("k", 167), ("z", 179), ("u", 179), ("m", 267), ("a" , 445), ("l", 134)] 作为字符串

标签: python list dictionary tuples


【解决方案1】:

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

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}

【讨论】:

  • 这里在代码本身中给出列表,您需要获取列表表单用户作为输入
  • 当我发布答案时,问题并不清楚。但是,要将字符串转换为列表,请看这里:stackoverflow.com/questions/1894269/…
  • 感谢我需要阅读 ast 模块
  • 我对 ast 模块的理解是否正确,如果输入中有右括号,它可以将输入的列表集元组转换为列表集元组?
【解决方案2】:

使用正则表达式将元组内的(,和字符串中的)分别替换为{:}

>>> 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}'的解释:

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

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

【讨论】:

  • 实际上我尝试过 smt 这样的好方法,你能解释一下 're.sub(r'(("\w"), (d+))', r'{\1:\2 }', i)' 如果你忙非虚拟机
  • @AkbolatOkassov,更新了答案。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 2015-09-24
  • 2010-12-11
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
相关资源
最近更新 更多