【发布时间】:2017-07-01 03:39:59
【问题描述】:
我尝试过 for in 循环、while true 循环、next 等。要么我一遍又一遍地重复获取信息,要么一旦找到一个元素,循环就不会重新开始。我也在 SO 和 google 上搜索过解决方案,但没有成功。
我想要做的是:
for feature in parJson:
ids = feature['properties']['id']
event = feature['properties']['event']
headline = feature['properties']['headline']
expires = feature['properties']['expires']
areaDesc = feature['properties']['areaDesc']
geoCodes = feature['properties']['geocode']['UGC']
states = alerts.getZones(geoCodes)
def getZones(self, getZones):
zones = json.loads(open("resources/zones.json").read())
parsedZones = zones['features']
#TODO figure out how to compare this list!
states = []
for ugcCode in getZones:
ugcCode = str(ugcCode)
for element in parsedZones:
ugc = element['properties']['id']
state = element['properties']['state']
if ugc == ugcCode:
states.append(state)
break
print(states)
getZones 是 UGC 地理编码区域的列表。 parsedZones 是来自 api.weather.gov/alerts/active 的手表警告建议的 json 列表。
还有数据:
parsedZones:https://api.weather.gov/zones(下载到磁盘,因为它太大了)
parJson:https://api.weather.gov/alerts/active
从活动警报列表中,我获得了警告有效的 ugc 代码。 api 没有给出状态,只有那些代码。所以我需要将代码解码为州名。我已经有一本带有州名/缩写的字典。我需要的是一组基于警告中列出的 UGC 代码的独特状态的 python 集。一旦我有了状态,我可以使用它的缩写查找每个状态名称,然后显示状态。所以它会是这样的:
假设警告对德克萨斯州和俄克拉荷马州有效。提供的代码是 OKC001 和 TXC001。我不能只使用startswith 来获取前两个字母,因为有些地区不以州缩写开头。因此,我必须使用我下载到服务器的 api 提供的区域列表。我需要一次查找每个提供的代码并检索两个字母的缩写。我得到它之后就可以使用它了。但我似乎无法让它工作。目标是将每个州的缩写添加到一个集合中以获得唯一值。
到目前为止我所做的最终结果是这样的:
[] None
Severe Thunderstorm Watch
Windsor; Orange; Rutland
[] None [] None
Flood Warning
DeKalb; Marshall
['IN', 'IN', 'IN'] None
Special Weather Statement
Miami; Wabash; Huntington
['PA', 'PA', 'PA'] None
Special Weather Statement
Wyoming; Lackawanna; Luzerne
[] None
Flood Advisory
Sequoyah
['NY', 'NY', 'NY', 'NY', 'NY', 'NY', 'NY'] None
Special Weather Statement
Onondaga; Madison; Northern Oneida; Southern Oneida; Cortland; Otsego; Chenango
【问题讨论】:
-
每次在“for”循环中循环时,都会覆盖上一次运行的信息。此代码会将所有这些变量设置为与它查看的最后一个值相对应的变量。
-
感谢您提供的信息。我也试过这个,没有设置任何具有相同结果的变量。本质上,我最终得到了一些列出状态的行和一些没有列出状态的行。我猜这是由覆盖引起的..?
-
你想要的输出是什么?
-
最终目标是在页面上显示:德克萨斯州、俄克拉荷马州。理想情况下,我会有一个像这样的列表: ['TX', 'OK'] 然后我可以使用它从看起来像 {'Texas': 'TX', 'Oklahoma': 'OK '} 所以基本上: ['TXC001', 'OKC001'] 那么这会给我 ['TX', 'OK'] 然后 ['Texas', 'Oklahoma'] 我可以从中打印 Texas, Oklahoma 并且它会做这是每个警报。有些警报为同一州列出了多个 UGC 代码,所以在我得到州缩写后,我知道我可以使用一组来获取唯一值。
标签: python python-3.x