Python 3 for loop resu的打印顺序

2024-05-15 00:40:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python3.6中编写了一个脚本,它查询API数据以从邮政编码返回邮政地址。你知道吗

脚本如下:

import requests
import urllib.parse 

main_api = 'http://link.to.api_site/json?'
key = 'AbCdEfGhIjKlMnOpQrStUvWxYz0123456789'
address = '90210'

url = main_api + urllib.parse.urlencode({'address':address, 'key':key})

json_data = requests.get(url).json()

for result in json_data["results"][0]["address_components"]:
    print(result["long_name"])

问题是JSON数据的给定顺序。当我从web浏览器运行查询时,数据显示为:

{
   "results" : [
     {
     "address_components" : [
        {
           "long_name" : "90210",
           "short_name" : "90210",
           "types" : [ "postal_code" ]
        },
        {
           "long_name" : "Beverly Hills",
           "short_name" : "Beverly Hills",
           "types" : [ "locality", "political" ]
        },
        {
           "long_name" : "Los Angeles County",
           "short_name" : "Los Angeles County",
           "types" : [ "administrative_area_level_2", "political" ]
        },
        {
           "long_name" : "California",
           "short_name" : "CA",
           "types" : [ "administrative_area_level_1", "political" ]
        },
        {
           "long_name" : "United States",
           "short_name" : "US",
           "types" : [ "country", "political" ]
        }

因此,当For循环运行时,它将按以下顺序返回数据:

90210
Beverly Hills
Los Angeles County
California
United States

我更希望地址按不同的顺序打印出来:

Beverly Hills
Los Angeles County
California
United States
90210

所以问题是,当For循环的结果被打印出来时,有没有一种方法可以改变顺序呢。你知道吗


Tags: 数据nameapijson顺序addresslongtypes
2条回答

你可以试试这样的东西

order_to_print = ["locality", "administrative_area_level_2", "administrative_area_level_1", "country", "postal_code"]

for order in order_to_print:
    for result in json_data["results"][0]["address_components"]:
        if result["types"][0] == order:
            print(result["long_name"])

但我认为如果没有像上面那样定义顺序是不可能的。你知道吗

一种简单的方法是将每个信息存储到变量中,然后按所需的正确顺序打印每个内容:

import requests
import urllib.parse 

main_api = 'http://link.to.api_site/json?'
key = 'AbCdEfGhIjKlMnOpQrStUvWxYz0123456789'
address = '90210'

url = main_api + urllib.parse.urlencode({'address':address, 'key':key})

json_data = requests.get(url).json()

area_code = json_data["results"][0]["address_components"][0]["long_name"]
area = json_data["results"][0]["address_components"][1]["long_name"]
county = json_data["results"][0]["address_components"][2]["long_name"]
state = json_data["results"][0]["address_components"][3]["long_name"]
country = json_data["results"][0]["address_components"][4]["long_name"]

print(area)
print(county)
print(state)
print(country)
print(area_code)

您还可以打印除第一个列表外的列表内容,然后“手动”打印第一个列表。你知道吗

也许是这样的?(我不确定这是否有效,我还没有测试过)。你知道吗

for result in json_data["results"][0]["address_components"][1:]:
    print(result["long_name"])
print(json_data["results"][0]["address_components"][1]["long_name"])

相关问题 更多 >

    热门问题