json 如何在一个列表中循环使用Python [复制]

dddzy1tm  于 2023-08-08  发布在  Python
关注(0)|答案(4)|浏览(115)

此问题在此处已有答案

Understanding for loops in Python(4个答案)
9天前关闭。
我是一个编程新手,在弄清楚如何使用Python在列表中循环列表时遇到了麻烦。
我正在处理来自美国的输出。Census API的格式如下:

[['NAME', 'POP_2020', 'POP_2021', 'state'],
 ['Oklahoma', '3962031', '3986639', '40'],
 ['Nebraska', '1961455', '1963692', '31'],
 ['Hawaii', '1451911', '1441553', '15'],
 ['South Dakota', '887099', '895376', '46'],
 ['Tennessee', '6920119', '6975218', '47']]

字符串
我想写一个函数,从每个列表中提取州名。
下面是我的代码:

import requests

    url = f'https://api.census.gov/data/2021/pep/populationget=NAME,POP_2020,POP_2021&for=state:*'
    response = requests.get(url)
    data = response.json()

    def statenames():
        for i in data:
            print(data[0])


上面的函数返回以下输出,这不是我想要的:

['NAME', 'POP_2020', 'POP_2021', 'state']
['NAME', 'POP_2020', 'POP_2021', 'state']
['NAME', 'POP_2020', 'POP_2021', 'state']
['NAME', 'POP_2020', 'POP_2021', 'state']
['NAME', 'POP_2020', 'POP_2021', 'state']
['NAME', 'POP_2020', 'POP_2021', 'state']
['NAME', 'POP_2020', 'POP_2021', 'state']
['NAME', 'POP_2020', 'POP_2021', 'state']


我已经能够通过编写一系列像这样的print语句来获得各个州的名称:

print(data[0][0])
print(data[1][0])
print(data[2][0])


我知道这不是很有效,我希望有一种方法可以使用for循环来代替。
提前感谢您的帮助!

ws51t4hk

ws51t4hk1#

Python提供了两种通过循环迭代数据的方法。你可以使用普通的索引for循环,也可以通过for-each循环来实现。无论选择哪种方法,都需要一个嵌套循环来迭代列表。外部循环将为外部列表中的所有项目运行,即,它将返回列表,就像您的代码一直在做的那样。内部循环将帮助您遍历该列表中的单个项。
索引方法:

for i in range(len(data)):
    for j in range(len(data[i])):
        print(data[i][j],end=' ')
    print()

字符串
对于每个循环:

for item in data:
    for value in item:
        print(value,end=' ')
    print()


这两个代码将给予相同的输出,因此您可以根据需要选择其中之一。在您可能需要根据数据的位置修改数据的情况下,索引循环将非常有用。否则,如果你只想遍历数据,你可以使用for-each循环,因为它会降低意外修改数据的风险。

apeeds0o

apeeds0o2#

在遍历整个列表时,从每个子列表中获取第一个索引,如下所示:

list = [['NAME', 'POP_2020', 'POP_2021', 'state'],
 ['Oklahoma', '3962031', '3986639', '40'],
 ['Nebraska', '1961455', '1963692', '31'],
 ['Hawaii', '1451911', '1441553', '15'],
 ['South Dakota', '887099', '895376', '46'],
 ['Tennessee', '6920119', '6975218', '47']]

for sublist in list:
    print(sublist[0]) # get the first item from the list

字符串
其输出:

NAME
Oklahoma
Nebraska
Hawaii
South Dakota
Tennessee

3pmvbmvn

3pmvbmvn3#

你的for循环在statenames中只打印了列表中的第一项。如果你想得到列表中子列表的第一项。你可以这样解决

list = [['NAME', 'POP_2020', 'POP_2021', 'state'],
['Oklahoma', '3962031', '3986639', '40'],
['Nebraska', '1961455', '1963692', '31'],
['Hawaii', '1451911', '1441553', '15'],
['South Dakota', '887099', '895376', '46'],
['Tennessee', '6920119', '6975218', '47']]

#Solution 1
for sublist in list:
    print(sublist[0]) # Get the first item from the list

#Solution 2
for i in range(len(list)):
    print(list[i][0]) # Get the first item from the list

# Output will like this:
# NAME
# Oklahoma
# Nebraska
# Hawaii
# South Dakota
# Tennessee

字符串

ruoxqz4g

ruoxqz4g4#

您只需要正确地迭代data列表以提取状态名称。当前,循环正在遍历data列表的每个元素,但您希望跳过第一个元素(标题行)并提取每个后续列表的第一个元素。
下面是如何使用for循环实现它:

import requests

url = f'https://api.census.gov/data/2021/pep/population?get=NAME,POP_2020,POP_2021&for=state:*'
response = requests.get(url)
data = response.json()

def statenames():
    for i in range(1, len(data)):
        state_name = data[i][0]
        print(state_name)

statenames()

字符串
在上面的代码中,循环从索引1(range(1, len(data)))而不是0开始,因此它跳过了标题行。对于每次迭代,它从每个列表的第一个元素(data[i][0])中提取状态名并打印出来。
这将产生以下输出:

Oklahoma
Nebraska
Hawaii
South Dakota
Tennessee

相关问题