2012-10-08 51 views
0

我有这个字符串(代表JSON值):Python的字符串列表对象

BABEL_JSON = "{ 
    'BD': u'Bangladesh', 
    'WF': u'Wallis y Futuna', 
    'BF': u'Burkina Faso' 
}" 

,我需要转变成一个列表对象是这样的:

BABEL_LIST = [ 
    ("BD", u"Bangladesh"), 
    ("WF", u"Wallis y Futuna"), 
    ("BF", u"Burkina Faso") 
] 

什么是最好的方式?开始我试着用:

import json 
BABEL_LIST = json.loads(str(BABEL_JSON)) 

但我有此错误:

TypeError: 'NoneType' object is not callable 
+10

这是无效的JSON。如果'BABEL_JSON'是一个字典,你可以使用'BABEL_JSON.items()'来获得'BABEL_LIST'。 – Blender

回答

0

它是是st和最快的方法做到这一点我发现

BABEL_JSON = "{ 
    'BD': u'Bangladesh', 
    'WF': u'Wallis y Futuna', 
    'BF': u'Burkina Faso' 
}" 

BABEL_LIST = [(key, countries[key]) for key in BABEL_JSON] 

如果你想按名称排序他们。

BABEL_LIST.sort(key=lambda tup: tup[1]) 
1

您没有一个有效的JSON字符串。在json中,字符串用"写入。字符串前面的u也是不允许的。你有你的初始类JSON字符串转换为一个有效的:

import json 
BABEL_JSON ="""{ 
    'BD': u'Bangladesh', 
    'WF': u'Wallis y Futuna', 
    'BF': u'Burkina Faso' 
}""" 
s = BABEL_JSON.replace(": u", ": ").replace("'", '"') 
print json.loads(s).items() 

http://ideone.com/OxPml

3

你需要使用文字的eval作为你的内容是不是有效的JSON,它是一个Python字典作为一个字符串。

literal eval安全地评估有效的python对象。

import ast 


BABEL_JSON = """{                
    'BD': u'Bangladesh',               
    'WF': u'Wallis y Futuna',             
    'BF': u'Burkina Faso'              
}""" 

myDict = ast.literal_eval(BABEL_JSON) 
print(myDict.items()) 
+0

+1 for'literal_eval' – halex

1
import json 
a = json.loads(l) 
zip(a.keys(),a.values()) 

另一种方式

import ast 
a = ast.literal_eval(l) 
zip(a.keys(),a.values()) 
+0

更高效地使用'a.items()' –

0

或使用正则表达式是这样的:

import re 

BABEL_JSON = """{ 
    'BD': u'Bangladesh', 
    'WF': u'Wallis y Futuna', 
    'BF': u'Burkina Faso' 
}""" 

print re.findall(r"'([^']+)': u'([^']+)'", BABEL_JSON) 

输出:

[('BD', 'Bangladesh'), ('WF', 'Wallis y Futuna'), ('BF', 'Burkina Faso')] 
相关问题