2016-01-27 58 views
0

所以我想比較一個字典,我創建了一個由boto3調用返回的字典響應。由API返回的Unicode字符串不等於我的字典

響應是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' 

然而,當我這兩種類型的字典用==比較不相等。

於是我嘗試添加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' 

這也不起作用。這些詞典並不是同樣的,如果我做了我的字典打印,它不會顯示u'somestring',它只是顯示'somestring'。

如何將我的詞典與boto3返回的內容進行比較?

+0

當你在一個調試器下拉和檢查,會發生什麼單獨的值並比較它們? – jimjkelly

回答

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