我有一串
"{a:'b', c:'d',e:''}"
Run Code Online (Sandbox Code Playgroud)
请不要因为字典条目的键未加引号,所以上一个问题中eval("{a:'b', c:'d',e:''}")所建议的简单方法不起作用。
将这个字符串转换成字典的最方便的方法是什么?
{'a':'b', 'c':'d', 'e':''}
Run Code Online (Sandbox Code Playgroud)
如果这是来自受信任的来源(由于eval不安全,请不要将其用于一般用户输入;但是,如果从潜在的恶意用户那里获取输入,则应使用JSON格式,而应使用json模块)可以配合使用eval。
source = """{e: '', a: 'b', c: 'd'}"""
class identdict(dict):
def __missing__(self, key):
return key
d = eval(source, identdict())
print(d)
Run Code Online (Sandbox Code Playgroud)
版画
{'a': 'b', 'c': 'd', 'e': ''}
Run Code Online (Sandbox Code Playgroud)
这是如何工作的,我们创建了一个新的字典子类identdict来定义magic方法__missing__。调用此方法可查找字典中缺少的键。在这种情况下,我们只返回键,因此字典将键映射到它们自己。然后source是eval使用uated identdict实例作为globals论据。eval从globals映射中查找变量的值;因为它是一个identdict,所以现在方便地访问的每个变量的值就是该变量的名称。
适用于更复杂的字符串作为值,以及适用于Python文字语法的任何东西。
根据您要解析的内容的复杂性,这可能有效:
s = "{a:'b', c:'d',e:''}"
d = dict([
(x.split(':')[0].strip(), x.split(':')[1].strip("' "))
for x in s.strip("{}").split(',')
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
409 次 |
| 最近记录: |