如何访问Python字典嵌套列表内的字典指定键
「字典-列表-字典」嵌套结构内层键访问方案
你原有代码的问题出在两个地方:
- 遍历
people.items()时已经拿到了键和对应的值,你没有用返回的值,反而重复通过people[i]取值,属于冗余操作 - 列表的下标从0开始计数,你用外层字典的键
i(值为1、2)作为列表索引取值,既不能保证拿到存Sex的字典,就算拿到了对应字典,也没有继续通过键名取最终的值,自然得不到预期结果。
方案1:按固定索引取值(适配你当前的示例结构)
你的示例里,每个用户对应的属性列表顺序固定:第0位是name字典、第1位是Age字典、第2位是Sex字典,直接按索引取即可:
people = {1: [{"name": 'John'}, {'Age': '27'}, {'Sex': 'Male'}], 2: [{"name": 'Marie'}, {'Age': '22'}, {'Sex': 'Female'}], } for user_id, attr_list in people.items(): # 索引2对应列表里第三个元素,也就是存Sex的字典 sex_info = attr_list[2] # 从字典中通过键名取到性别的值 user_sex = sex_info['Sex'] print(f"ID为{user_id}的用户性别:{user_sex}")
逻辑说明:
- 遍历外层字典时,
user_id对应外层的数字键,attr_list直接对应当前键绑定的属性列表,不需要重复查字典 - 按已知的列表位置拿到存性别的小字典后,通过
['Sex']键访问就能拿到最终值。
方案2:遍历列表匹配目标键(适配列表顺序不固定的场景)
如果后续列表里的字典顺序可能变动,靠固定索引取值会出错,这时候可以遍历内层列表匹配目标键:
people = {1: [{"name": 'John'}, {'Age': '27'}, {'Sex': 'Male'}], 2: [{"name": 'Marie'}, {'Age': '22'}, {'Sex': 'Female'}], } for user_id, attr_list in people.items(): user_sex = None # 逐个检查列表里的字典 for single_attr in attr_list: if 'Sex' in single_attr: user_sex = single_attr['Sex'] break print(f"ID为{user_id}的用户性别:{user_sex}")
逻辑说明:
- 不管Sex字段在列表的哪个位置,只要遍历到包含
Sex键的字典就能取到值,不会因为顺序变化报错 - 找到目标值后直接通过
break终止内层循环,避免无意义的遍历。
补充建议:你当前把每个用户属性拆成独立字典塞进列表的结构设计比较冗余,更合理的结构是把同一个用户的属性合并到同一个字典里,比如写成
people = {1: {"name": "John", "Age": "27", "Sex": "Male"}, 2: {"name": "Marie", "Age": "22", "Sex": "Female"}},这种结构下直接通过people[user_id]['Sex']就能一步拿到目标值,不需要处理中间的列表逻辑。
内容的提问来源于stack exchange,提问作者Yes Idk How To Code
相关产品推荐
相关产品推荐

