【发布时间】:2018-04-24 04:39:32
【问题描述】:
我有这样一条信息:
[{"city": "Beverly Hills", "state": "", "postal_code": "", "address": "Some Address", "country": "USA"}, {"city": "New York", "state": "NY", "postal_code": "", "address": "P.O. BOX 52404", "country": "USA"}]
当我执行type() 时,它显示为<class 'str'>。
如何在 Python 3 中将这些信息从字符串获取到字典列表?
我尝试了literal_eval 并收到错误malformed node or string:,所以我不确定最好的方法是什么。'
编辑
这是一个应该可以重现的例子:
mydata = {'programs': '["France"]', 'ids': '[]', 'citizenships': '[]', 'nationalities': '["FR"]', 'places_of_birth': '[]', 'dates_of_birth': '["1973-03-25"]', 'addresses': '[{"state": null, "postal_code": null, "address": null, "city": null, "country": "FR"}]'}
for key,value in mydata.items():
if type(value) is str:
result = literal_eval(value)
print("value 1: ", value)
print("value type 2:", type(value))
print("result 3: ", result)
print("result 4: ", type(result))
for item in result:
print("item in result 5:", item)
print("type of item in result 6:", type(item))
这是错误:
文件“server.py”,第 137 行,在 insert_in_db 结果 = literal_eval(值)
文件“/Users/user/anaconda3/envs/apcaller/lib/python3.5/ast.py”,第 84 行,位于 literal_eval 中 返回 _convert(node_or_string)
_convert 中的文件“/Users/user/anaconda3/envs/apcaller/lib/python3.5/ast.py”,第 57 行 返回列表(地图(_convert,node.elts))
_convert 中的文件“/Users/user/anaconda3/envs/apcaller/lib/python3.5/ast.py”,第 62 行 在 zip(node.keys, node.values))
文件“/Users/user/anaconda3/envs/apcaller/lib/python3.5/ast.py”,第 61 行,在 返回 dict((_convert(k), _convert(v)) 为 k, v
文件“/Users/user/anaconda3/envs/apcaller/lib/python3.5/ast.py”,第 83 行,在 _convert raise ValueError('错误的节点或字符串:' + repr(node)) ValueError:错误的节点或字符串:<_ast.name object at>
也许我错过了检查空值的步骤?我似乎在 eval line 137 上得到了错误。我从下面提到的堆栈溢出评论中得到了使用ast.literal_eval 的想法。
与我的处理方式相比,这更多的是数据问题吗?我对 Python 不是很熟悉,所以我很可能遗漏了一些东西。
【问题讨论】:
-
literal_eval适用于您的字符串。 -
对我来说,
eval、ast.literal_eval和json.loads都可以正常工作,只要您提供的字符串。 -
看看上面的问题,和你的问题一样。
标签: python string python-3.x list dictionary