如何从JSON字典提取信息:生成颜色列表并筛选红色对应月份
解决方法:生成宝石颜色列表&筛选红色宝石对应月份
错误原因
你遇到的'string indices must be integers'错误,是因为循环时误遍历了外层字典的键(比如写了for gem in data:),而非data['gems']列表里的宝石字典。data是个字典,直接遍历会拿到键名(字符串'gems'),此时用gem['colour']试图用字符串索引字符串,自然触发报错。
1. 生成所有宝石的颜色列表
遍历data['gems']列表,提取每个字典中的colour字段即可:
data = {'gems': [{'name': 'garnet', 'colour': 'red', 'month': 'January'}, {'name': 'emerald', 'colour': 'green', 'month': 'May'}, {'name': "cat's eye", 'colour': 'yellow', 'month': 'June'}, {'name': 'sardonyx', 'colour': 'red', 'month': 'August'}, {'name': 'peridot', 'colour': 'green', 'month': 'September'}, {'name': 'ruby', 'colour': 'red', 'month': 'December'}]} # 列表推导式写法(简洁) all_colors = [gem['colour'] for gem in data['gems']] print(all_colors) # 输出: ['red', 'green', 'yellow', 'red', 'green', 'red'] # 传统for循环写法 all_colors = [] for gem in data['gems']: all_colors.append(gem['colour'])
2. 筛选颜色为红色的宝石对应月份
遍历data['gems'],通过if判断筛选出colour为'red'的条目,提取其month字段:
# 列表推导式写法(简洁) red_gem_months = [gem['month'] for gem in data['gems'] if gem['colour'] == 'red'] print(red_gem_months) # 输出: ['January', 'August', 'December'] # 传统for循环+if写法 red_gem_months = [] for gem in data['gems']: if gem['colour'] == 'red': red_gem_months.append(gem['month'])
内容的提问来源于stack exchange,提问作者simplemind
相关产品推荐
相关产品推荐

