2014-11-22 66 views
2

我可以使用下面的代码来提取列表中所有艺术家的艺术家之一。Python从json打印全部

print (data['topartists']['artist'][0]['name']) 

现在我想打印返回所有艺术家的名字。

我会假设使用:

for i in data: 
    print (data['topartists']['artist'][i]['name']) 

然而,这导致错误:TypeError: list indices must be integers, not unicode

我应该怎么添加打印所有的艺术家?

回答

1

您应该迭代艺术家,而不是数据本身。

for i in data['topartists']['artist']: 
    print (i['name']) 
+0

多数民众赞成它!谢谢,我会在几分钟内接受 – phicon 2014-11-22 14:48:48

1

你已经有了一个很好的答案,所以我只给出一点背景信息。

的这里的问题是,

for i in data: ... 

给你一个循环,其中idata各个元素,而不是像指数作为i=range(0,len(data))你可能预期。


解决方案为您的代码:

解决方案与i是,通过列表(C++/Java风格)变为一个计数器:

for i in range(0,len(data)): 
    print (data['topartists']['artist'][i]['name']) 

解决方案更接近正常Python符号(暗示了什么):

for artist in data['topartists']['artist']: 
    print (artist['name']) 

在这个更多pythonic解决方案中,该循环让您可以对列表中的每个元素(for artist in list_of_artists)执行某些操作,而不是像i那样为您提供一个计数器。