2017-09-22 123 views
1

我試圖循環訪問unicode數據列表。 type(d['results'])list。但是,organization_fields實際上是dict,但在查看負載時格式化爲unicode。問題是,我怎樣才能訪問organization_fields?我試圖使用ast.literal_eval(k)更改格式,但在嘗試這樣做時遇到了一些錯誤。循環訪問Unicode數據字典

而且,我得到我的迴應r並將其保存爲d = r.json()

 for a in d['results']: 
...:  for k,v in a.iteritems(): 
...:   print k 
...:   print type(k) 
...:   print('------break-----') 

這裏是輸出:

name 
<type 'unicode'> 
------break----- 
shared_comments 
<type 'unicode'> 
------break----- 
url 
<type 'unicode'> 
------break----- 
organization_fields 
<type 'unicode'> 
------break----- 

organization_fields

u'organization_fields': { 
     u'account_type': None, 
     u'id': u'some_id', 
     u'value': None 
    }, 

UPDATE

當我嘗試打印d['results'][0]我得到了在這裏防爆項的列表。 url,name,除了organization_fields不存在於其中。它只存在當我遍歷a在上面for循環

+0

將'print d'的結果添加到問題中。 –

回答

1

organization_fields不存儲爲unicode。密鑰是一個unicode字符串,但密鑰u'organization_fields'存儲的值的類型是使用unicode字符串密鑰存儲的更多值的字典。訪問組織字段的值與訪問任何其他字典的值相同。

如果您要訪問organization_fields在for循環:

for a in d['results']: 
    org_fields = a['organization_fields'] 
    print org_fields 

編輯:這聽起來並不像d每個元素[「結果」]包含用密鑰organization_fields存儲的值的字典。這應該做的伎倆。

for a in d['results']: 
    if 'organization_fields' in a: 
     org_fields = a['organization_fields'] 
     print org_fields 

如果你想看到其中d [「結果」]索引包含organization_fields的值,那麼做到這一點:

for i, a in enumerate(d['results']): 
    if 'organization_fields' in a: 
     org_fields = a['organization_fields'] 
     print org_fields 
     print 'index: %s' % i 

然後,用食指,你從那裏打印,你可以直接訪問:

org_fields = d['results'][index printed]['organization_fields'] 
+0

Received:'KeyError:'organization_fields'' – Rem

+0

@Rem我的編輯應該給你一個清晰的路徑來解決你的問題。我希望這有幫助。 – Evan

0

我不知道理解你的問題...

但如果我這樣做,你應該嘗試這樣的:

print d['result'][0]['organization_fields']['id'] 

應打印

some_id 

- >我不認爲有任何「Unicode數據」:有使用Unicode字符串作爲鍵dictionnaries。

+0

我試圖訪問'organization_fields'字典,但它存儲爲unicode。我只是試過,得到了'TypeError:列表索引必須是整數,而不是str' - 我想知道有沒有辦法將它變成字典,而不是unicode數據? – Rem

+0

是的,我錯過了你的數據堆棧中有一個列表。我在我的文章中添加了一個[0]。 –