python - 带有字典、列表和 If 语句的嵌套循环
问题描述
所以,我有一本字典,将美国各州的缩写分组到区域中。然后我有一个带有州缩写的 Pandas DataFrame 列。我正在尝试遍历字典值以查找匹配项并将区域名称/字典键附加到列表中。它似乎有效,但我缺少一些缩写,因此,总列表长度为 463。但是,当我添加一个else
-statement 来尝试解释缺失的状态时,列表长度会跳到 16500。
有人可以解释这里发生了什么吗?
user_df['State']
包含以下缩写:
user_df['State'].unique()
>>> ['GA', 'WA', 'NV', 'OK', 'TX', 'CA', 'MI', 'FL', 'OH', 'IL-IN-WI', 'TN', 'NY-NJ-PA', 'PA', 'DC-VA-MD-WV', 'IN', 'NE-IA', 'PA-NJ-DE-MD', 'AL', 'NC-SC', 'CO', 'NM', 'MA-NH', 'AZ', 'OR-WA', 'OH-KY-IN', 'SC', 'NY', 'TN-MS-AR', 'KY-IN', 'RI-MA', 'UT', 'HI', 'CT', 'LA', 'VA-NC', 'MD', 'WI', 'VA', 'MO-IL', 'MN-WI', 'MO-KS', 'NC']
region_dict = {}
region_dict['northeast'] = ['NY-NJ-PA', 'PA-NJ-DE-MD', 'NY', 'CT', 'MA-NH','RI-MA', 'DC-VA-MD-WV']
region_dict['midwest'] = ['OH', 'OK', 'MI', 'IL-IN-WI', 'NE-IA', 'MO-KS', 'MN-WI']
region_dict['southeast'] = ['TX','NC-SC', 'NC-VA', 'GA', 'FL', 'TN', 'KY-IN', 'TN-MS-AR', 'LA', 'IN' ]
region_dict['pacific'] = ['CA', 'NV', 'OR', 'WA', 'HI', 'OR-WA']
region_dict['intermountain'] = ['NM', 'CO', 'AZ']
region_list = []
for row in user_df['State']:
for k, v in region_dict.items():
for el in v:
if el == row:
region_list.append(k)
# Until here it works for 463 but when I add the line below
# to fill in for missing values in my dictionary I get 16500
else:
region_list.append('Unknown')
解决方案
对于 的每一行,您将为中包含的 33 个区域中的每user_df
一个附加一个列表项。因此,结果的长度将是。region_dict
<number of rows of user_df> * <number of regions in region_dict>
正如@balderman 所建议的,颠倒你的定义region_dict
会节省一个for
-loop;事实上,for
在你的代码中甚至有两个循环,在反转之后region_dict
(这是快速的并且不随 的大小而缩放user_df
)。代码变得更短,更容易理解正在发生的事情。
如果您想省去打字,让 Python 自动为您反转字典,例如:
region_dict_inverted = {}
for region in region_dict.keys():
for abbr in region_dict[region]:
region_dict_inverted[abbr] = region
你的循环将是
region_list = []
for state in user_df['State']:
if state in region_dict_inverted:
region_list.append(region_dict_inverted[state])
else:
region_list.append('unknown')
推荐阅读
- javascript - 是否可以将字体真棒图标添加到 whiwheel.js 段
- java - 如何将图像 Uri 或位图传递给 SQLite 数据库的 int 参数以保存图像?
- c# - 如何通过在 mvc 实体 sql 中添加更多金额来更新学生费用
- javascript - 单击处理程序奇怪的行为
- reactjs - 从 Redux 删除或添加项目很慢
- python - MacOSX 上的 pyenv 和诗歌安装
- python - PDF文件中的tkinter Python选择区域
- php - Laravel Passport 登录控制器单元功能测试
- python - 使用python将目录推送到bitbucket存储库
- amazon-web-services - 多容器部署到 ElasticBeanstalk