对象到字典Python

对象到字典Python,python,object,dictionary,pandas,mapping,Python,Object,Dictionary,Pandas,Mapping,大家好,我有一个pandas列,其中包含的对象是字典,但不能识别为字典 df.rowExample[0] = '[{"sold": 12, "breed": "golden"}, {"breed": "silver", "bought": 49}, {"breed": "golden", "bought": 29}]' 我尝试了DataFrame.to_dict(df.column)和dict(df.column),但键只是一个数字索引,值是整行 谢

大家好,我有一个pandas列,其中包含的对象是字典,但不能识别为字典

df.rowExample[0] = '[{"sold": 12, "breed": "golden"}, {"breed": "silver",  
                    "bought": 49}, {"breed": "golden", "bought": 29}]'
我尝试了DataFrame.to_dict(df.column)和dict(df.column),但键只是一个数字索引,值是整行


谢谢

它好像没有字典。。。而是字典形式的字符串

试着做一些类似的事情

>>> import ast
>>> ast.literal_eval(df.rowExample[0])
编辑:这看起来像是返回一个字典列表。。。所以

ast.literal_eval(df.rowExample[0])中的字典的

abetterdict=dictionary

它似乎没有字典。。。而是字典形式的字符串

试着做一些类似的事情

>>> import ast
>>> ast.literal_eval(df.rowExample[0])
编辑:这看起来像是返回一个字典列表。。。所以

ast.literal_eval(df.rowExample[0])中的字典的

abetterdict=dictionary

您的数据是字典列表的字符串表示形式。您可以使用
literal\u eval
将其转换为列表对象:

import ast

obj = '[{"sold": 12, "breed": "golden"}, {"breed": "silver", "bought": 49},   
       {"breed": "golden", "bought": 29}]'

obj = ast.literal_eval(obj)
或者通过使用
json
模块以某种方式更加安全:

import json

obj = '[{"sold": 12, "breed": "golden"}, {"breed": "silver", "bought": 49},   
       {"breed": "golden", "bought": 29}]'

obj = json.loads(obj)

您的数据是字典列表的字符串表示形式。您可以使用
literal\u eval
将其转换为列表对象:

import ast

obj = '[{"sold": 12, "breed": "golden"}, {"breed": "silver", "bought": 49},   
       {"breed": "golden", "bought": 29}]'

obj = ast.literal_eval(obj)
或者通过使用
json
模块以某种方式更加安全:

import json

obj = '[{"sold": 12, "breed": "golden"}, {"breed": "silver", "bought": 49},   
       {"breed": "golden", "bought": 29}]'

obj = json.loads(obj)

那只是一根线。只要字符串只包含字符串、数字、元组、列表、dicts、boolean和None,就可以使用转换字符串。这只是一个字符串。只要您的字符串只包含字符串、数字、元组、列表、dicts、boolean和None,您就可以使用转换字符串。非常感谢Busterdust!我使用rowExample[0]只显示了一行,是否有一种方法可以对每一行执行此操作?我尝试了一个for循环,但是对于arrayFrows:ast.literal\u eval(row)中的行,它的速度非常慢,很可能会继续很慢,你需要点击所有的东西,这是非常糟糕的!我使用rowExample[0]只显示了一行,是否有一种方法可以对每一行执行此操作?我尝试了一个for循环,但是它对于arrayFrows:ast.literal\u eval(row)中的行非常慢,很可能会继续很慢,您需要解决所有问题。问题不在于使用
json.loads
是否比使用
ast.literal\u eval
更安全。很简单,如果你有
json
,你应该使用
json.loads
,如果你有由字符串、数字、元组、列表、dicts、boolean和
None组成的Python文本,您应该使用
ast.literal\u eval
。谢谢DeepSpace和Steven问题不在于使用
json.loads
是否比使用
ast.literal\u eval
更安全。很简单,如果你有
json
,你应该使用
json.loads
,如果你有由字符串、数字、元组、列表、dicts、boolean和
None
组成的Python文本,你应该使用
ast.literal\u eval
。谢谢DeepSpace和Steven