Python 从嵌套字典中提取数据,TypeError:字符串索引必须是整数

Python 从嵌套字典中提取数据,TypeError:字符串索引必须是整数,python,json,dictionary,Python,Json,Dictionary,我收到以下错误 TypeError: string indices must be integers 当我试图打印嵌套字典中的某些数据时 {u'id': u'000123', u'payload': u"{'account_title': u’sam b’, 'phone_num': ‘1234567890’, 'security_pin': u'000000', 'remote_word': u’secret123’, 'email_address': ‘email@gmail.com’,

我收到以下错误

TypeError: string indices must be integers
当我试图打印嵌套字典中的某些数据时

{u'id': u'000123', u'payload': u"{'account_title': u’sam b’, 'phone_num': ‘1234567890’, 'security_pin': u'000000', 'remote_word': u’secret123’, 'email_address': ‘email@gmail.com’, 'password': u’password123’}”}
例如,假设上述内容已分配给变量“account\u info”


print(account\u info['payload'])
由于
payload
的值是一个字符串,而不是一个字典,因此无法对其进行索引。删除嵌套字典周围的引号以使代码正常工作:

account_info = {u'id': u'000123', u'payload': {'account_title': u'sam b', 'phone_num': '1234567890', 'security_pin': u'000000', 'remote_word': u'secret123', 'email_address': 'email@gmail.com', 'password': u'password123'}}

print(account_info["payload"]["email_address"])

由于
payload
值是一个字符串,您需要在索引之前将其转换为dict。有,这里有一个带有eval的:

import ast
...
payload = ast.literal_eval(account_info['payload'])
print(payload['email_address'])

account\u info['payload']
是一个带有
坏单引号的字符串
,因此您应该使用replace方法删除所有坏单引号,并使用将字符串转换为字典。如果不删除不正确的单引号,
ast.literal\u eval()
方法将引发
SyntaxError:标识符错误中的无效字符

Ex.

import ast
account_info = {u'id': u'000123', u'payload': u"{'account_title': u’sam b’, 'phone_num': ‘1234567890’,"
                               u" 'security_pin': u'000000', 'remote_word': u’secret123’, "
                               u"'email_address': ‘email@gmail.com’, 'password': u’password123’}"}

account_info['payload'] = ast.literal_eval(account_info['payload'].replace("‘","'").replace("’","'"))
print(account_info['payload']['email_address'])
O/p:

email@gmail.com

您定义它的方式,
account\u info['payload']
的值是一个看起来像字典的字符串对象。改为这样定义:

account_info = {u'id': u'000123', u'payload': {u'account_title': u’sam b’, u'phone_num': ‘1234567890’, u'security_pin': u'000000', u'remote_word': u’secret123’, u'email_address': u‘email@gmail.com’, u'password': u’password123’}}

使用此定义,
account\u info['payload']
的值现在是一个字典,
account\u info['payload']['email\u address']
将返回email@gmail.com“

有效负载
的值是一个字符串,不是字典。我如何引用电子邮件地址,以便为其值分配一个变量?在有效负载之后(以及在末尾)去掉dict中的“”
email@gmail.com
account_info = {u'id': u'000123', u'payload': {u'account_title': u’sam b’, u'phone_num': ‘1234567890’, u'security_pin': u'000000', u'remote_word': u’secret123’, u'email_address': u‘email@gmail.com’, u'password': u’password123’}}