python列表中的Lookup元素使用来自另一个列表的每个值

时间:2017-06-30 15:55:32

标签: python python-3.x

我已尝试进入循环,而真循环,接下来等等。要么我反复重复信息,要么循环在找到元素后不会重新开始。我也在搜索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

2 个答案:

答案 0 :(得分:0)

你的问题是循环导致所有变量被覆盖你要循环的每个元素。

states = []
for feature in parJson:
    ...
    states.append(alerts.getZones(geoCodes))
print(states)

这将生成相关州的列表。您可能希望将此信息全部存储在嵌套字典中,每个状态都是一个键,如果您有其他信息而不是覆盖,那么您想要知道的各个项目是您追加的列表...

答案 1 :(得分:0)

我发现了问题。我上传了一个带有区域的新文件,但实际上并没有覆盖旧文件。使用wget检索文件,它解决了问题。感谢@mauve的建议。一旦我得到了正确的数据,它确实对我的问题有帮助。