我已尝试进入循环,而真循环,接下来等等。要么我反复重复信息,要么循环在找到元素后不会重新开始。我也在搜索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
答案 0 :(得分:0)
你的问题是循环导致所有变量被覆盖你要循环的每个元素。
states = []
for feature in parJson:
...
states.append(alerts.getZones(geoCodes))
print(states)
这将生成相关州的列表。您可能希望将此信息全部存储在嵌套字典中,每个状态都是一个键,如果您有其他信息而不是覆盖,那么您想要知道的各个项目是您追加的列表...
答案 1 :(得分:0)
我发现了问题。我上传了一个带有区域的新文件,但实际上并没有覆盖旧文件。使用wget检索文件,它解决了问题。感谢@mauve的建议。一旦我得到了正确的数据,它确实对我的问题有帮助。