Python 将字符串转换为dict和back的优雅方式

Python 将字符串转换为dict和back的优雅方式,python,string,dictionary,type-conversion,Python,String,Dictionary,Type Conversion,是否有一个优雅的单行程序可以将这种类型的字符串转换为dict? 我现在在谷歌上搜索了一个小时,但如果没有几圈分割字符串,我就无法让它工作 Input = "2:9, 6:90, 7:60" Output = {'2': 9, '6': 90, '7': 60} 我还需要从dict到string的反向操作。您可以使用ast.literal\u eval并将括号放在字符串的每一端,尽管您的键将是int而不是string from ast import literal_eval

是否有一个优雅的单行程序可以将这种类型的字符串转换为dict? 我现在在谷歌上搜索了一个小时,但如果没有几圈分割字符串,我就无法让它工作

Input  = "2:9, 6:90, 7:60"
Output = {'2': 9, '6': 90, '7': 60}

我还需要从dict到string的反向操作。

您可以使用
ast.literal\u eval
并将括号放在字符串的每一端,尽管您的键将是int而不是string

from ast import literal_eval

Input  = "2:9, 6:90, 7:60"

Output = literal_eval(f"{{{input}}}")

要将输出固定为字符串键,只需手动转换即可

Output = dict(zip(map(str, Output), Output.values()))


不导入您需要使用的任何库
str.split

Output = dict(s.split(':') for s in Input.split(', '))

虽然现在你的值是字符串,所以你需要修正它

Output = dict(zip(Output, map(int, Output.values())))


对于循环,性能方面最有效的将是正常的

my_string = "2:9, 6:90, 7:60"
my_dict = {}
for s in my_string.split(', '):
     k, v = s.split(":")
     my_dict[k] = int(v)
其中
my_dict
将包含:

>>> my_dict
{'2': 9, '7': 60, '6': 90}

要返回相同的字符串,您可以在
dict.items()
上执行
.join()
,如下所示:

>>> ", ".join("{}:{}".format(k, v) for k, v in my_dict.items())
'2:9, 7:60, 6:90'
或者,您也可以键入“将dict强制转换为字符串”,并对其进行一些格式化,如:

>>> str(my_dict)[1:-1].replace(": ", ":").replace("'", "")
'2:9, 7:60, 6:90'

不用问问题,如果您想要一个使键为字符串、值为int的单行程序:

dict([[j[0].strip(), int(j[1])] for j in [i.split(':') for i in Input.split(',')]])

请提供更多信息,说明此转换将如何工作。为什么整数键突然变成字符串?
{key:int(val)表示键,val在map(lambda x:x.strip().split(':')、Input.split(','))}
但是它太难看了,没有人应该使用它。为了好玩,使用多行代码进行这样的转换并不丢脸,下面是另一个基于regex的理想解决方案:
{key:int(val)表示key,val表示re.findall('(?P\d+):(?P\d+),Input)}
我不怕多行代码。作为一个新手,我更想知道是否有比多行更优雅的pythonian方式。这种情况太常见了,我编写了很多带有多个循环等的代码,然后我发现python中有一个简单的单行解决方案:)thx需要帮助!非常感谢你!for循环比我的多循环版本更优雅:)我必须改进pythons语法。当我读到你的代码时,我非常清楚,但我想我自己永远也不会明白这一点:/这将是完美的答案!我仍然选择莫伊努丁的答案,因为作为一个新手,它更具可读性,并且已经进行了重新转换。谢谢你的努力!非常感谢!
>>> my_dict
{'2': 9, '7': 60, '6': 90}
>>> ", ".join("{}:{}".format(k, v) for k, v in my_dict.items())
'2:9, 7:60, 6:90'
>>> str(my_dict)[1:-1].replace(": ", ":").replace("'", "")
'2:9, 7:60, 6:90'
dict([[j[0].strip(), int(j[1])] for j in [i.split(':') for i in Input.split(',')]])