猿问

通过查找值是否在列表中来删除整个嵌套字典

我正在尝试制作美国邮政编码内值的等值线图。我有一个 json 文件,其中包含与每个邮政编码对应的 ZCTA5CE 区域的点。我正在使用 Folium 包。


现在映射工作,但非常缓慢——基于我机器上运行的其他项目需要 10 分钟,并且几乎不可能通过滑动和缩放与地图交互——因为 json 文件的大小 (482.2M)因此产生的字典。


我想绘制的数据没有所有邮政编码的信息,所以我想删除与那些不在我的数据中的邮政编码相关联的邮政编码字典中的信息。


我的问题是:如何遍历邮政编码信息的字典并删除不在我指定的邮政编码列表中的字典。


为了更清楚地了解我正在使用的字典的结构:


zip_code_geo_dict.keys() 给出:


dict_keys(['type', 'features'])


其中zip_code_geo_dict['type']是字符串,zip_code_geo_dict['features']是列表。


现在,zip_code_geo_dict['features'][0]是:


{'type': 'Feature','geometry': {'type': 'MultiPolygon',

'coordinates': [[[[-88.252618, 32.92675],

[-88.249724, 32.93242],

**bajillions of lines of coordinates here**

[-88.34043199999999, 32.991199]]]]},

'properties': {'ZCTA5CE10': '35442',

'AFFGEOID10': '8600000US35442',

'GEOID10': '35442',

'ALAND10': 610213891,

'AWATER10': 10838694}}

我的源数据可能会更改,因此我要映射的实际邮政编码列表是动态的。也就是说,我总是可以创建一个列表:


zips_of_interest = ['15210', '15222'] 

如何遍历zip_code_geo_dict以删除基于的坐标信息zip_code_geo_dict['features']['properties']['ZCTA5CE10'] NOT IN zips_of_interest?有必要保留总体 dict 结构,以便过滤后的版本zip_code_geo_dict['features']与原始版本位于同一“位置”(它需要是一个 dict 作为较大zip_code_geo_dict对象中的第二个键)。


我认为需要注意的是,我想保留 dict 的基本结构,因为我要将其传递给choroplethFolium 中的方法。


哆啦的时光机
浏览 125回答 2
2回答

慕斯王

如果邮政编码信息可能会发生变化,我的第一个建议是使用 RTree、KDTree 或 BallTree 之类的东西将信息存储在允许按区域轻松访问的结构中。这些使您能够有效地进行查询,例如“r我感兴趣的邮政编码半径内的所有邮政编码是多少?”。就实际实现过滤器而言,如果您有很多邮政编码,您可能想要做类似的事情,lookup = set(zips_of_interest)以便您可以搜索 O(1) 而不是 O(n) 中的包含。对于len(zips_of_interest)<15左右,列表可能很好(很大程度上取决于您的平台)。你提到的“第一项”zip_code_geo_dict是[诸如此类]。的类型是zip_code_geo_dict什么?是字典吗?过滤掉它取决于它到底是什么。也就是说,对于常见的数据结构,您基本上已经编写了命令。lookup&nbsp;=&nbsp;set(zip_code_geo_dict)字典condensed_data&nbsp;=&nbsp;{k:zip_code_geo_dict[k]&nbsp;for&nbsp;k&nbsp;in&nbsp;zip_code_geo_dict &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;zip_code_geo_dict[k]['properties']['ZCTA5CE10']&nbsp;in&nbsp;lookup}列表condensed_data&nbsp;=&nbsp;[v&nbsp;for&nbsp;v&nbsp;in&nbsp;zip_code_geo_dict &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;v['properties']['ZCTA5CE10']&nbsp;in&nbsp;lookup]在这两种情况下,您基本上是在告诉 Python 为您提供来自原始数据结构的所有感兴趣的位置。
随时随地看视频慕课网APP

相关分类

Python
我要回答