簡體   English   中英

Python 3-搜索列表或字典

[英]Python 3 - Search List or Dictionary

我正在編寫一個程序來檢索json數據,其中的數據值是固定的。

返回的值將是

'UN','VP','PO','MO','GO','VG','EX'

程序運行時,預期收益將類似於以下內容:

outlook1 = 'UN'
outlook2 = 'VP'
outlook3 = 'PO'
outlook4 = 'MO'
outlook5 = 'GO'
outlook6 = 'VG'
outlook7 = 'EX'

我希望程序讀取分配的兩個字母值並將其更改為更具描述性的輸出。

a = ['UN','VP','PO','MO','GO','VG','EX']
b = ['Unknown', 'Very Poor', 'Poor', 'Moderate', 'Good', 'Very Good', 
'Excellent']

所以'VP'將變成'非常差'

我還考慮過使用字典,但無法考慮如何將鍵和值與已設置的數據進行匹配。

dict1 = {'UN':'Unknown','VP':'Very Poor','PO':'Poor','MO':'Moderate',
        'GO':'Good','VG':'Very Good','EX':'Excellent'}

到目前為止,我能夠解決此問題的唯一方法是使用很長的if-elif語句

x = []

if outlook1 == 'UN':
    x.append(b[0])
elif outlook1 == 'VP':
    x.append(b[1])
elif outlook1 == 'PO':
    x.append(b[2])
elif outlook1 == 'MO':
    x.append(b[3])
elif outlook1 == 'GO':
    x.append(b[4])
elif outlook1 == 'VG':
    x.append(b[5])
elif outlook1 == 'EX':
    x.append(b[6])

這是我的代碼:

import requests
import urllib.parse
import texttable as tt

main_api = 'example.org'
key='123456789'

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

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

block1_time = json_data["SiteRep"]["DV"]["Location"]["Period"][1]["Rep"][0]["$"]
block1_f = json_data["SiteRep"]["DV"]["Location"]["Period"][1]["Rep"][0]["F"]
block1_s = json_data["SiteRep"]["DV"]["Location"]["Period"][1]["Rep"][0]["S"]
block1_h = json_data["SiteRep"]["DV"]["Location"]["Period"][1]["Rep"][0]["H"]
block1_t = json_data["SiteRep"]["DV"]["Location"]["Period"][1]["Rep"][0]["T"]
block1_v = json_data["SiteRep"]["DV"]["Location"]["Period"][1]["Rep"][0]["V"]
block1_d = json_data["SiteRep"]["DV"]["Location"]["Period"][1]["Rep"][0]["D"]
block1_u = json_data["SiteRep"]["DV"]["Location"]["Period"][1]["Rep"][0]["U"]
block1_w = json_data["SiteRep"]["DV"]["Location"]["Period"][1]["Rep"][0]["W"]
block1_p = json_data["SiteRep"]["DV"]["Location"]["Period"][1]["Rep"][0]["Pp"]

dates = ['00:00','03:00','06:00','09:00','12:00','15:00','18:00','21:00']
temp = []
feels = []
speed = []
direc = []
humid = []
visib = []
wtype = []
prob = []
uvind = []

descr = ['Unknown', 'Very Poor', 'Poor', 'Moderate', 'Good', 'Very Good', 
    'Excellent'] #[0-6]
if block1_v == 'UN':
    visib.append(descr[0])
elif block1_v == 'VP':
    visib.append(descr[1])
elif block1_v == 'PO':
    visib.append(descr[2])
elif block1_v == 'MO':
    visib.append(descr[3])
elif block1_v == 'GO':
    visib.append(descr[4])
elif block1_v == 'VG':
    visib.append(descr[5])
elif block1_v == 'EX':
    visib.append(descr[6])

空列表被追加並用於填充TextTable。

在python中一定有更簡單的方法。 希望這可以使事情變得更清楚,並幫助到大家。

**** UPDATE **** json數據****

{“ SiteRep”:{“ Wx”:{“ Param”:[{“ name”:“ F”,“ units”:“ C”,“ $”:“感覺像溫度”},{“ name”:“ G“,” units“:” mph“,” $“:”風陣“},{” name“:” H“,” units“:”%“,” $“:”屏幕相對濕度“},{ “名稱”: “T”, “單元”: “C”, “$”: “溫度”},{ “名稱”: “V”, “單元”: “”, “$”: “可見性”}, {“名稱”:“ D”,“單位”:“羅盤”,“ $”:“風向”},{“名稱”:“ S”,“單位”:“ mph”,“ $”:“風速度“},{”名稱“:” U“,”單位“:”“,” $“:”最大紫外線指數“},{”名稱“:” W“,”單位“:”“,” $“ :“天氣類型”},{“名稱”:“ Pp”,“單位”:“%”,“ $”:“降水概率”}]},“ DV”:{“ dataDate”:“ 2017-11- 12T18:00:00Z “ ”類型“: ”預測“, ”位置“:{ ”我“: ”26“, ”LAT“: ”53.3336“, ”LON“: ” - 2.85“, ”名“:” LIVERPOOL JOHN LENNON AIRPORT“,”國家“:” ENGLAND“,”大陸“:” EUROPE“,”海拔“:” 22.0“,”期間“:[{” type“:” Day“,” value“:” 2017 -11-12Z “ ”REP“:[{ ”d“: ”西北偏北“, ”F“: ”4“, ”G“: ”22“, ”H“: ”57“, ”PP“:” 0 ”, “S”: “18”, “T”: “8”, “V”: “VG”, “W”: “1”, “U”: “1”, “$”: “900”} ,{ “d”: “西北偏北”, “F”: “2”, “G”: “29”, “H”: “65”, “PP”: “0”, “S”: “11”, “T”: “6”, “V”: “VG”, “W”: “0”, “U”: “0”, “$”: “1080”},{ “d”: “西北偏北”, “F”: “2”, “G”: “27”, “H”:“6 7" , “PP”: “0”, “S”: “11”, “T”: “5”, “V”: “VG”, “W”: “0”, “U”: “0” , “$”: “1260”}]},{ “類型”: “日”, “值”: “2017-11-13Z”, “REP”:[{ “d”: “西北偏北”, “F” : “1”, “G”: “25”, “H”: “71”, “PP”: “0”, “S”: “11”, “T”: “5”, “V”:” VG “ ”W“: ”0“, ”U“: ”0“, ”$“: ”0“},{ ”d“: ”西北偏北“, ”F“: ”0“, ”G“:” 22" , “H”: “74”, “PP”: “0”, “S”: “11”, “T”: “4”, “V”: “VG”, “W”: “0” , “U”: “0”, “$”: “180”},{ “d”: “西北偏北”, “F”: “0”, “G”: “18”, “H”: “77” , “PP”: “0”, “S”: “9”, “T”: “3”, “V”: “VG”, “W”: “0”, “U”: “0”,” $ “:” 360 “},{” d “:” W “ ”F“: ”2“, ”G“: ”9“, ”H“: ”82“, ”PP“: ”1“,” S “:” 2" , “T”: “4”, “V”: “GO”, “W”: “3”, “U”: “1”, “$”: “540”},{” d “:” S”, “F”: “5”, “G”: “7”, “H”: “74”, “PP”: “5”, “S”: “4”, “T” : “6”, “V”: “GO”, “W”: “7”, “U”: “1”, “$”: “720”},{ “d”: “SSW”, “F” : “6”, “G”: “11”, “H”: “80”, “PP”: “5”, “S”: “7”, “T”: “7”, “V”:” GO “ ”W“: ”7“, ”U“: ”1“, ”$“: ”900“},{ ”d“: ”SSW“, ”F“: ”5“, ”G“:” 16" , “H”: “79”, “PP”: “6”, “S”: “7”, “T”: “7”, “V”: “GO”, “W”: “7” , “U”: “0”, “$”: “1080”},{ “d”: “SSW”, “F”: “5”, “G”: “18”, “H”: “79” , “PP”: “6”, “S”: “9”, “T”: “7”, “V”: “VG”, “W”: “7”, “U”: “0”,” $ “:” 1260 “}]},{” 類型 “:” 日 “ ”值“: ”2017-11-14Z“, ”REP“:[{ ”d“: ”SSW“, ”F“:” 5" , “G”: “18”, “H”: “87”, “PP”: “50”, “S”: “9”, “T”: “8”,” V “:” VG “ ”W“: ”12“, ”U“: ”0“, ”$“: ”0“},{ ”d“: ”SW“, ”F“: ”7“,” G “:” 20" , “H”: “92”, “PP”: “52”, “S”: “9”, “T”: “9”, “V”: “GO”, “W” : “12”, “U”: “0”, “$”: “180”},{ “d”: “WSW”, “F”: “8”, “G”: “20”, “H” : “91”, “PP”: “14”, “S”: “11”, “T”: “10”, “V”: “VG”, “W”: “7”, “U”:” 0" , “$”: “360”},{ “d”: “WSW”, “F”: “8”, “G”: “20”, “H”: “91”, “PP”:” 17" , “S”: “11”, “T”: “10”, “V”: “GO”, “W”: “8”, “U”: “1”, “$”: “540” },{ “d”: “W”, “F”: “10”, “G”: “16”, “H”: “92”, “PP”: “61”, “S”: “9” , “T”: “12”, “V”: “MO”, “W”: “12”, “U”: “1”, “$”: “720”},{ “d”: “SW” , “F”: “11”, “G”: “11”, “H”: “92”, “PP”: “53”, “S”: “7”, “T”: “11”,” V “:” GO “ ”W“: ”12“, ”U“: ”1“, ”$“: ”900“},{ ”d“: ”S“, ”F“: ”10“,” G “:” 9" , “H”: “94”, “PP”: “15”, “S”: “4”, “T”: “10”, “V”: “MO”, “W” : “7”, “U”: “0”, “$”: “1080”},{ “d”: “WSW”, “F”: “9”, “G”: “13”, “H” : “92”, “PP”: “15”, “S”: “9”, “T”: “10”, “V”: “GO”, “W”: “8”, “U”:” 0" , “$”: “1260”}]},{ “類型”: “日”, “值”: “2017-11-15Z”, “REP”:[{ “d”: “WSW”,” F “:” 9" , “G”: “13”, “H”: “93”, “PP”: “54”, “S”: “7”, “T”: “10”, “V” : “GO”, “W”: “12”, “U”: “0”, “$”: “0”},{ “d”: “WSW”, “F”: “9”, “G” : “11”, “H”: “93”, “PP”: “14”, “S”: “7”, “T”: “10”, “V”: “GO”, “W”:” 7" , “U”: “0”, “$”: “180”},{ “d”: “NW”, “F”: “8”,“G “:” 11" , “H”: “91”, “PP”: “11”, “S”: “7”, “T”: “9”, “V”: “GO”, “W”: “7”, “U”: “0”, “$”: “360”},{ “d”: “SE”, “F”: “8”, “G”: “11”, “H”: “91”, “PP”: “7”, “S”: “7”, “T”: “10”, “V”: “GO”, “W”: “7”, “U”:“1 “ ”$“: ”540“},{ ”d“: ”S“, ”F“: ”10“, ”G“: ”11“, ”H“: ”87“, ”PP“:” 8 ”, “S”: “7”, “T”: “11”, “V”: “GO”, “W”: “7”, “U”: “1”, “$”: “720”} ,{ “d”: “SSE”, “F”: “10”, “G”: “13”, “H”: “87”, “PP”: “15”, “S”: “7”, “T”: “11”, “V”: “GO”, “W”: “8”, “U”: “1”, “$”: “900”},{ “d”: “SSE”, “F”: “8”, “G”: “13”, “H”: “92”, “PP”: “11”, “S”: “7”, “T”: “10”,“V “:” GO “ ”W“: ”7“, ”U“: ”0“, ”$“: ”1080“},{ ”d“: ”S“, ”F“: ”8“,” G “:” 16" , “H”: “92”, “PP”: “8”, “S”: “9”, “T”: “10”, “V”: “GO”, “W”: “7”, “U”: “0”, “$”: “1260”}]},{ “類型”: “日”, “值”: “2017-11-16Z”, “代表”:[{ “d”: “S”, “F”: “7”, “G”: “16”, “H”: “93”, “PP”: “7”, “S”: “9”,“T “:” 9" , “V”: “GO”, “W”: “7”, “U”: “0”, “$”: “0”},{ “d”: “S”,“F “:” 7" , “G”: “16”, “H”: “93”, “PP”: “7”, “S”: “9”, “T”: “9”, “V”: “GO”, “W”: “7”, “U”: “0”, “$”: “180”},{ “d”: “S”, “F”: “7”, “G”: “18”, “H”: “92”, “PP”: “7”, “S”: “9”, “T”: “9”, “V”: “GO”, “W”:“7 “ ”U“: ”0“, ”$“: ”360“},{ ”d“: ”S“, ”F“: ”7“, ”G“: ”20“, ”H“:” 90 ”, “PP”: “14”, “S”: “11”, “T”: “10”, “V”: “GO”, “W”: “7”, “U”: “1”, “$”:“54 0 “},{” d “:” SSW “ ”F“: ”9“, ”G“: ”25“, ”H“: ”84“, ”PP“: ”9“, ”S“:” 13" , “T”: “11”, “V”: “GO”, “W”: “7”, “U”: “1”, “$”: “720”},{ “d”:” SW”, “F”: “8”, “G”: “27”, “H”: “84”, “PP”: “55”, “S”: “16”, “T”: “11” , “V”: “GO”, “W”: “12”, “U”: “1”, “$”: “900”},{ “d”: “SW”, “F”: “7” , “G”: “25”, “H”: “79”, “PP”: “14”, “S”: “11”, “T”: “10”, “V”: “VG”,” W “:” 7" , “U”: “0”, “$”: “1080”},{ “d”: “W”, “F”: “6”, “G”: “25”,” H “:” 78" , “PP”: “14”, “S”: “13”, “T”: “9”, “V”: “GO”, “W”: “7”, “U” : “0”, “$”: “1260”}]}]}}}}

a = ['UN','VP','PO','MO','GO','VG','EX']
b = ['Unknown', 'Very Poor', 'Poor', 'Moderate', 'Good', 'Very Good', 
'Excellent']

然后說你有一個變量c包含2從字符串a ,你可以從它的相應的描述b有:

b[a.index(c)]

因此,對於c = "MO" ,以上給出的是"Moderate" 希望您可以將其合並到代碼中,以刪除笨拙的if-statements

就這么簡單:

dict1 = {'UN':'Unknown','VP':'Very Poor','PO':'Poor','MO':'Moderate',
        'GO':'Good','VG':'Very Good','EX':'Excellent'}

block1_v = json_data["SiteRep"]["DV"]["Location"]["Period"][1]["Rep"][0]["V"]

visib.append(dict1[block1_v])

如果您願意,可以在這里嘗試一些正則表達式:

它是一個示例,您可以修改代碼並根據需要使用捕獲的組。

dict1 = {'UN':'Unknown','VP':'Very Poor','PO':'Poor','MO':'Moderate',
        'GO':'Good','VG':'Very Good','EX':'Excellent'}

a = ['UN','VP','PO','MO','GO','VG','EX']

import re
data="""outlook1 = 'UN'
outlook2 = 'VP'
outlook3 = 'PO'
outlook4 = 'MO'
outlook5 = 'GO'
outlook6 = 'VG'
outlook7 = 'EX'"""

final=[]
pattern="outlook\d\s[=]\s'(\w{0,2})'"
match=re.finditer(pattern,data)
for find in match:

    for key,value in enumerate(dict1.items()):
        if str(find.group(1))==str(value[0]):
            final.insert(a.index(value[0]),value[1])

print(final)

輸出:

['Unknown', 'Very Poor', 'Poor', 'Moderate', 'Good', 'Very Good', 'Excellent']

或者,如果您希望獲得有價值的outlook ,則可以嘗試:

final={}
pattern="(outlook\d)\s[=]\s'(\w{0,2})'"
match=re.finditer(pattern,data)
for find in match:

    for key,value in enumerate(dict1.items()):
        if str(find.group(2))==str(value[0]):
            final[find.group(1)]=value[1]

print(final)

輸出:

{'outlook2': 'Very Poor', 'outlook5': 'Good', 'outlook6': 'Very Good', 'outlook3': 'Poor', 'outlook4': 'Moderate', 'outlook1': 'Unknown', 'outlook7': 'Excellent'}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM