如何将这个特定字符串转换为字典?

问题描述 投票:0回答:1

我获得了 API 返回,并且能够导航到我需要的部分。然而,它不是字典,而是字符串。如何将这样的字符串转换为字典,以便我可以访问我想要的键?

roster = """*Person 1: Bob
Person 2: Alice
Person 3: Eve
Person 4: Mallory
Person 5: Trent*
"""

到目前为止,我已经尝试了多种方法,但没有成功 - 即 json.loads() 以及列表理解和分割方法的一些迭代。任何帮助都会很棒。

我希望将我的花名册变量变成一本字典,所以它读起来像这样:

roster_dict = {'*Person 1*' : '*Bob*', '*Person 2*' : '*Alice*', '*Person 3*' : '*Eve*', '*Person 4*' : '*Mallory*', '*Person 5*' : '*Trent*'}

这是我发现另一个问题的方法 - 然而,修改后对我不起作用。

str = " *Jan = January; Feb = February; Mar = March*"

dictionary = dict(subString.split("=") for subString in str.split(";"))
python python-3.x string dictionary type-conversion
1个回答
0
投票

如果你想用一句话来做(尽管你可能不应该),你可以这样做

roster_dict = dict([["*"+item.strip()+"*" for item in person.split(":")] for person in roster.replace("*", "").splitlines()])

为了看看它是如何工作的,我们可以一点一点地构建它:

>>> roster
'*Person 1: Bob\nPerson 2: Alice\nPerson 3: Eve\nPerson 4: Mallory\nPerson 5: Trent*\n'
>>> roster.replace("*", "")
'Person 1: Bob\nPerson 2: Alice\nPerson 3: Eve\nPerson 4: Mallory\nPerson 5: Trent\n'
>>> roster.replace("*", "").splitlines()
['Person 1: Bob', 'Person 2: Alice', 'Person 3: Eve', 'Person 4: Mallory', 'Person 5: Trent']
>>> [person.split(":") for person in roster.replace("*", "").splitlines()]
[['Person 1', ' Bob'], ['Person 2', ' Alice'], ['Person 3', ' Eve'], ['Person 4', ' Mallory'], ['Person 5', ' Trent']]
>>> dict([["*"+item.strip()+"*" for item in person.split(":")] for person in roster.replace("*", "").splitlines()])
{'*Person 1*': '*Bob*', '*Person 2*': '*Alice*', '*Person 3*': '*Eve*', '*Person 4*': '*Mallory*', '*Person 5*': '*Trent*'}
© www.soinside.com 2019 - 2024. All rights reserved.