我有一个字符串如何把字符串转换成一个字典在Python
"{a:'b', c:'d',e:''}"
什么是最便捷的方式,使其向字典
{'a':'b', 'c':'d', 'e':''}
为什么会产生这么多的人这是重复的this?在发布之前,我已经完成了作业。在认为别人犯了错误之前,请重新考虑你是否错了。谢谢!
我有一个字符串如何把字符串转换成一个字典在Python
"{a:'b', c:'d',e:''}"
什么是最便捷的方式,使其向字典
{'a':'b', 'c':'d', 'e':''}
为什么会产生这么多的人这是重复的this?在发布之前,我已经完成了作业。在认为别人犯了错误之前,请重新考虑你是否错了。谢谢!
取决于你解析什么的复杂性,这可能是工作:
s = "{a:'b', c:'d',e:''}"
d = dict([
(x.split(':')[0].strip(), x.split(':')[1].strip("' "))
for x in s.strip("{}").split(',')
])
哇,很酷的答案男人:) – RoadRunner
谢谢:) Python很酷。 – Will
是的,是的,仍然有困难做这样的长时间表达,虽然,尼斯工作的人:) – RoadRunner
你也可以做这种方式,即使它不漂亮。它确实取决于你的字符串的结构。是否还有其他类型的字符串字典需要评估?
string = "{a:'b', c:'d',e:''}"[1:-1].split(",")
d = {}
for s in string:
s = s.strip()
key, value = s[0], s[-2]
if value.isalpha():
d[key] = value
else:
d[key] = ''
print(d)
输出:
{'e': '', 'a': 'b', 'c': 'd'}
警告根据需要,如果你有一个键映射到你的中间空字符串这种方法是行不通的“字典”。我不会删除这个答案,因为我认为这种方法仍然可以挽救。
这可能比Will的答案稍微普遍一些,但它仍然要依赖于你正在解析的确切结构。如果你的键值对由字母数字组成,你应该没问题。
In [3]: import re
In [4]: import itertools
In [5]: my_string = "{a:'b', c:'d',e:''}"
In [6]: temp = re.findall(r"\w", my_string)
In [7]: temp = itertools.zip_longest(temp[0::2], temp[1::2], fillvalue = "")
In [8]: dict(temp)
Out[8]: {'a': 'b', 'c': 'd', 'e': ''}
如果你想知道什么是与拉链功能发生的事情,看到这些问题:
Collect every pair of elements from a list into tuples in Python
我以前itertools.zip_longest
所以你可以使用的填充值,通过启发:
嗯,第二个想法,这将无法按需要工作,如果你有一个关键映射到你的“字典。”那么,它可能仍然有用。 –
为什么downvote? –
看起来像某人低估了每个人。我投给你。 – Harrison
你可以通过使用json包实现这个;
import json
s = '{"a":"b", "c":"d","e":"f"}'
my_dict = json.loads(s)
print type(my_dict)
不适用于问题 –
如果这是从可信源(不使用此为一般用户的输入,为eval is not secure;但话又说回来,如果你从潜在恶意用户获取输入您应使用JSON格式改为json
module),您可以使用eval
。
source = """{e: '', a: 'b', c: 'd'}"""
class identdict(dict):
def __missing__(self, key):
return key
d = eval(source, identdict())
print(d)
打印
{'a': 'b', 'c': 'd', 'e': ''}
这是如何工作的是我们创建了一个新的字典子类identdict
定义魔术方法__missing__
。该方法被称为查找字典中缺少的键。在这种情况下,我们只是返回键,所以字典将键映射到自己。然后使用identdict
实例作为globals
参数,source
为eval
。 eval
将查找来自globals
映射的变量值;因为它是一个identdict
,所以访问的每个变量的值现在很方便,现在是变量的名称。
适用于更复杂的字符串作为值,以及任何合适的Python文字语法。
中的字符串尼斯。虽然我的内容只是字母数字,但很好学习新的东西。由于我已经接受了其他答案,我只能为你胜利。欣赏。 – Harrison
@哈里森它总是可以为你改变接受的答案 –
@AnttiHaapala伟大的小黑客!但是这个工作到底如何?我不是很了解这是如何通过'NameError',不应该在字典甚至处理一个缺失的值之前被提出?它是如何返回一个字符串?我在'__missing__'方法中添加了'print(type(key))',并且如果我做了'id [1]'这样的'id''是'identdict',并且如果我做了'
import re
str="{a:'b', c:'d',e:''}"
dict([i.replace("'","").split(":") for i in re.findall(r"(\w+\:'.*?')",str)])
这样的字符串的来源是什么? –
@KevinGuan,它不同。 'eval'将为'a'工作:'b''但不是'a:'b'' – Harrison
@ juanpa.arrivillaga:我猜这是一个Javascript对象字面值(_not_ JSON,它需要属性名称被引用)。 – ShadowRanger