将字符串转换为词典列表Python 3

将字符串转换为词典列表Python 3,python,string,python-3.x,list,dictionary,Python,String,Python 3.x,List,Dictionary,我有这样一条信息: [{"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()时,它显示为 在Python3中,如何从字

我有这样一条信息:

[{"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()
时,它显示为

在Python3中,如何从字符串到字典列表中获取这些信息

我尝试了
literal\u eval
,但得到了一个错误
错误的节点或字符串:
,因此我不确定最好的方法是什么。”

编辑

以下是一个应可复制的示例:

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行 结果=文字值(值)
文件“/Users/user/anaconda3/envs/apicaller/lib/python3.5/ast.py”,第84行,文本值 返回\u转换(节点\u或字符串)
文件“/Users/user/anaconda3/envs/apicaller/lib/python3.5/ast.py”,第57行,在 返回列表(map(_convert,node.elts))
文件“/Users/user/anaconda3/envs/apicaller/lib/python3.5/ast.py”,第62行,在 在zip中(node.keys、node.values))
文件“/Users/user/anaconda3/envs/apicaller/lib/python3.5/ast.py”,第61行,在 返回k的dict((_convert(k),_convert(v)),v
文件“/Users/user/anaconda3/envs/apicaller/lib/python3.5/ast.py”,第83行,在 raise VALUERROR('格式错误的节点或字符串:'+repr(节点)) ValueError:节点或字符串格式不正确:

也许我遗漏了检查空值的步骤?我似乎在eval
第137行
上得到了错误。我从下面提到的堆栈溢出注释中得到了使用
ast.literal\u eval
的想法

这更像是一个数据问题而不是我处理它的方式吗?我对Python不是很熟悉,所以我很可能遗漏了一些东西。

import json
import json

data = json.loads(<your_string>)
data=json.loads()
属于列表类型

您应该能够为该列表设置一个变量,它应该可以工作。但是,如果数据是文本字符串,您可以执行以下操作:

import json
test = json.loads('[{"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"}]')

print(type(test))
-><type 'list'>
导入json
test=json.loads(“[{”城市“:”贝弗利山“,”州“:”邮政编码“:”地址“:”一些地址“,”国家“:”美国“},{”城市“:”纽约“,”州“:”纽约“,”邮政编码“:”地址“:”邮政信箱52404“,”国家“:”美国“}”)
打印(类型(测试))
->

如果您的信息类型为字符串,则可以使用json模块

import json

data = json.loads(<your_string>)

for element in data:
    for key, value in element.items():
        print("{}: {}".format(key, value))
导入json
data=json.loads()
对于数据中的元素:
对于键,元素.items()中的值:
打印(“{}:{}”。格式(键、值))

我知道我回答得很晚,但希望这对其他人有帮助:

您可以使用: pip安装pyyaml 进口yaml

x = '[{"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"}]'

x = yaml.load(x)

现在字符串已被转换为字典列表。

literal\u eval
适用于您的字符串。对我来说,
eval
ast.literal\u eval
json.loads
所有工作都没有问题,因为您提供了字符串。可能重复上述问题,它与您的问题相同。用户的字符串(如果如图所示)也应该与literal_eval一起使用。不管问题是什么,问题可能不是它是有效的JSON而不是有效的Python。您是否建议它是null/None问题或其他问题?PyYAML的
yaml.load()
被证明具有潜在的不安全性。这里也没有必要使用它,因此没有理由建议使用它。这对我从str获取dict列表起到了作用。
yaml.load
已被弃用,因为它很容易被利用(正如@Anthon评论的)。现在必须指定加载器。例如
yaml.load(x,Loader=yaml.BaseLoader)
Read了解更多信息。