使用另一个列表中的每个值查找python列表中的元素

使用另一个列表中的每个值查找python列表中的元素,python,python-3.x,Python,Python 3.x,我已经尝试了in循环,而true循环,next等等。要么我得到了一次又一次重复的信息,要么循环找到一个元素后就不会重新开始了。我也在SO和google上搜索了一个解决方案,但没有成功 我想做的是: for feature in parJson: ids = feature['properties']['id'] event = feature['properties']['event'] headline = feature['properties']['headline

我已经尝试了in循环,而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:(下载到磁盘上,因为它太大了)

parJson:

从活动警报列表中,我得到警告有效的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

您的问题是,循环会导致您正在循环的每个元素的所有变量都被覆盖

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

这将产生一份有关国家的名单。您可能希望将这些信息全部存储在一个嵌套字典中,每个状态都是一个键,您想知道的各种项目都是列表,如果您有其他信息而不是覆盖这些信息,则可以附加这些列表…

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

每次在“for”循环中循环时,都会覆盖上一次运行的信息。这段代码将所有这些变量设置为它最后查看的值对应的变量。谢谢您提供的信息。我也尝试过这样做,没有设置任何具有相同结果的变量。从本质上讲,我最终得到了一些列有状态的行和一些未列有状态的行。我猜这是由覆盖造成的…?您想要什么输出?最终目标是在页面上显示:德克萨斯州、俄克拉荷马州。理想情况下,我会有一个这样的列表:['TX','OK'],然后我可以用它从类似于{'Texas':'TX','俄克拉何马州:'OK'}的字典中检索州名,基本上:['TXC001','OKC001'],然后给我['TX','OK'],然后['Texas','Oklahoma'],我可以从中打印德克萨斯州,俄克拉何马州,它会根据警报执行此操作。有些警报为同一状态列出了多个UGC代码,因此在我获得状态缩写后,我知道我可以使用集合来获取唯一值。谢谢,我将在午餐后尝试此方法,并让您知道发生了什么。好的,因此我必须在循环中打印状态,因为循环还呈现html模板。但是,我继续向类方法添加了列表。我得到的基本上是我以前得到的。它不打印大多数元素的状态。只是有时候打印。我将更新我的问题以显示我的意思。