2017-09-22 68 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]。 –