我有一串很奇怪的字符串,我想分成一个列表:
"44":{"1":4.6,"0":1.53,"2":7.2},"53":{"1":4.2,"0":1.4,"2":6.75},"121":{"1":3.2,"0":1.6,"2":6}
理想情况下,我想:
"44":{"1":4.6,"0":1.53,"2":7.2}
"53":{"1":4.2,"0":1.4,"2":6.75}
"121":{"1":3.2,"0":1.6,"2":6}
但是我决定分开每一个}。
mystring.split('}')似乎将我的字符串拆分为一个列表,每个字符有一个元素由于某种原因。不知道我做错了什么。救命啊!
答案 0 :(得分:4)
几乎看起来像是有效的JSON。
>>> s = '"44":{"1":4.6,"0":1.53,"2":7.2},"53":{"1":4.2,"0":1.4,"2":6.75},"121":{"1":3.2,"0":1.6,"2":6}'
>>> import json
>>> d = json.loads("{" + s + "}")
>>> d
{'53': {'2': 6.75, '0': 1.4, '1': 4.2}, '44': {'2': 7.2, '0': 1.53, '1': 4.6}, '
121': {'2': 6, '0': 1.6, '1': 3.2}}
>>> for key,value in d.items():
... print("Key: {0} - Value: {1}".format(key,value))
...
Key: 53 - Value: {'2': 6.75, '0': 1.4, '1': 4.2}
Key: 44 - Value: {'2': 7.2, '0': 1.53, '1': 4.6}
Key: 121 - Value: {'2': 6, '0': 1.6, '1': 3.2}
答案 1 :(得分:1)
你可以试试这个:
s = '"44":{"1":4.6,"0":1.53,"2":7.2},"53":{"1":4.2,"0":1.4,"2":6.75},"121":{"1":3.2,"0":1.6,"2":6}'
h = eval("{"+s+"}")
for k in h: print k,h[k]
但由于eval不安全,因为它可以执行任意代码,所以使用literal_eval要好得多。 literal_eval仅适用于有效的数据类型:
from ast import literal_eval
s = # ....
h = literal_eval("{"+s+"}")
for k in h: print k,h[k]
<强>输出强>
121 {'1': 3.2, '0': 1.6, '2': 6}
44 {'1': 4.6, '0': 1.53, '2': 7.2}
53 {'1': 4.2, '0': 1.4, '2': 6.75}
答案 2 :(得分:0)
您可以这样做:
>>> string = '"44":{"1":4.6,"0":1.53,"2":7.2},"53":{"1":4.2,"0":1.4,"2":6.75},"121":{"1":3.2,"0":1.6,"2":6}'
>>> string.replace('},','}***').split('***')
['"44":{"1":4.6,"0":1.53,"2":7.2}', '"53":{"1":4.2,"0":1.4,"2":6.75}', '"121": {"1":3.2,"0":1.6,"2":6}']
答案 3 :(得分:0)
正确回答您的问题取决于允许的表达方式。如果表达式可能包含嵌套大括号,那么您需要递归正则表达式。以下解决方案不支持嵌套大括号,但它足以解析您的示例:
for token in re.findall(r'((?:[^{,]|{.*?})+)', mystring):
print token
答案 4 :(得分:0)
您的输入几乎是JSON;这是字典的内容,只是缺少了括号括号:
import json
nearly_json = '"44":{"1":4.6,"0":1.53,"2":7.2},"53":{"1":4.2,"0":1.4,"2":6.75},"121":{"1":3.2,"0":1.6,"2":6}'
d = json.loads(f'{{ {nearly_json} }}') # Add the missing enclosing braces, and convert to Python (deserialize)...
d
{'44': {'1': 4.6, '0': 1.53, '2': 7.2}, '53': {'1': 4.2, '0': 1.4, '2': 6.75}, '121': {'1': 3.2, '0': 1.6, '2': 6}}
d['44']
{'1': 4.6, '0': 1.53, '2': 7.2}
正如TimPietzcker所说,您现在可以遍历该命令,例如与.items()
或者,您可以访问其.keys()
答案 5 :(得分:-2)
只是分开逗号?
print '"44":{"1":4.6,"0":1.53,"2":7.2},"53":{"1":4.2,"0":1.4,"2":6.75},"121":{"1":3.2,"0":1.6,"2":6}'.split(',')
给出:
['"44":{"1":4.6', '"0":1.53', '"2":7.2}', '"53":{"1":4.2', '"0":1.4', '"2":6.75}', '"121":{"1":3.2', '"0":1.6', '"2":6}']
这就是你要求的。