API返回的Unicode字符串不等于我的dict

时间:2016-01-27 10:37:34

标签: python json unicode boto3

所以我试图将我创建的字典与boto3调用返回的字典响应进行比较。

响应是JSON文档的表示,我想检查它们是否相同。

Boto3始终将字符串作为unicode返回。以下是回复:

{u'Version': u'2012-10-17', u'Statement': [{u'Action': u'sts:AssumeRole', u'Principal': {u'Service': u'ec2.amazonaws.com'}, u'Effect': u'Allow', u'Sid': u''}]}

我最初创建了这样的字典:

default_documment = {}
default_documment['Version'] = '2012-10-17'
default_documment['Statement'] = [{}]
default_documment['Statement'][0]['Sid'] = ''
default_documment['Statement'][0]['Effect'] = 'Allow'
default_documment['Statement'][0]['Principal'] = {}
default_documment['Statement'][0]['Principal']['Service'] = 'ec2.amazonaws.com'
default_documment['Statement'][0]['Action'] = 'sts:AssumeRole'

但是,当我将这两个词与==进行比较时,它们并不相等。

所以当我创建dict时,我尝试将u添加到所有字符串中:

# Default document for a new role
default_documment = {}
default_documment[u'Version'] = u'2012-10-17'
default_documment[u'Statement'] = [{}]
default_documment[u'Statement'][0][u'Sid'] = u''
default_documment[u'Statement'][0][u'Effect'] = u'Allow'
default_documment[u'Statement'][0][u'Principal'] = {}
default_documment[u'Statement'][0][u'Principal'][u'Service'] = u'ec2.amazonaws.com'
default_documment[u'Statement'][0][u'Action'] = u'sts:AssumeRole'

这也不起作用。这些词汇并不是同等重要的,如果我对我的词典进行印刷,它并没有表明你的某些内容。'它只显示了某些字符串'。

如何比较我的dict与boto3返回的内容?

1 个答案:

答案 0 :(得分:0)

您的第二次尝试在Python 2.7和3.3中正常运行。下面只是您的Boto3响应和代码的剪切和粘贴(更正了文档拼写:)

D = {u'Version': u'2012-10-17', u'Statement': [{u'Action': u'sts:AssumeRole', u'Principal': {u'Service': u'ec2.amazonaws.com'}, u'Effect': u'Allow', u'Sid': u''}]}

default_document = {}
default_document[u'Version'] = u'2012-10-17'
default_document[u'Statement'] = [{}]
default_document[u'Statement'][0][u'Sid'] = u''
default_document[u'Statement'][0][u'Effect'] = u'Allow'
default_document[u'Statement'][0][u'Principal'] = {}
default_document[u'Statement'][0][u'Principal'][u'Service'] = u'ec2.amazonaws.com'
default_document[u'Statement'][0][u'Action'] = u'sts:AssumeRole'

print(D == default_document)

输出:

True