如何打印字典中重复键的值?解决嵌套标题仅输出最后键值对问题
问题描述
遍历字典列表时,发现NestedTabs中的重复Title键仅打印最后一组键值对(例如W3schools的嵌套Tabs仅输出JavaScript标题),如何实现打印字典中重复键的所有值?
使用的代码
def displayAllTabs(dict_items): for dict in dict_items: title = dict.get("Title") print(title) if "NestedTabs" in dict.keys(): nestedTitle = dict["NestedTabs"]["Title"] print(f'\t{nestedTitle}')
原始字典列表
[ { "index": 1, "Title": "SE Factory", "Url": "https://www.sefactory.io", "NestedTabs": {"Title": "UI", "Url": "https://www.sefactory.io/uix"}, }, {"index": 2, "Title": "Google", "Url": "https://www.google.com"}, { "index": 3, "Title": "W3schools", "Url": "https://www.w3schools.com", "NestedTabs": { "Title": "Html", "Url": "https://www.w3schools.com/html/default.asp", "Title": "Css", "Url": "https://www.w3schools.com/css/default.asp", "Title": "JavaScript", "Url": "https://www.w3schools.com/js/default.asp", }, }, ]
问题原因
Python的字典不支持重复键,当你在字典里定义多个同名键时,后面的键会直接覆盖前面的。所以W3schools的NestedTabs字典中,实际只保留了最后一组Title: JavaScript和对应的Url,前面的Html、Css条目都被覆盖了,自然无法打印出所有值。
解决方案
1. 修正数据结构
把NestedTabs从单个字典改成字典列表,每个子项是包含Title和Url的独立字典,这样就能存储多个嵌套标签:
[ { "index": 1, "Title": "SE Factory", "Url": "https://www.sefactory.io", "NestedTabs": [{"Title": "UI", "Url": "https://www.sefactory.io/uix"}], }, {"index": 2, "Title": "Google", "Url": "https://www.google.com"}, { "index": 3, "Title": "W3schools", "Url": "https://www.w3schools.com", "NestedTabs": [ {"Title": "Html", "Url": "https://www.w3schools.com/html/default.asp"}, {"Title": "Css", "Url": "https://www.w3schools.com/css/default.asp"}, {"Title": "JavaScript", "Url": "https://www.w3schools.com/js/default.asp"}, ], }, ]
2. 修改遍历代码
修改displayAllTabs函数,循环遍历NestedTabs列表中的每个字典,打印所有Title:
def displayAllTabs(dict_items): for item in dict_items: title = item.get("Title") print(title) # 检查是否存在NestedTabs且是列表类型 if "NestedTabs" in item and isinstance(item["NestedTabs"], list): for nested_tab in item["NestedTabs"]: nested_title = nested_tab.get("Title") print(f'\t{nested_title}')
运行结果
执行修改后的代码,会输出:
SE Factory UI Google W3schools Html Css JavaScript
内容的提问来源于stack exchange,提问作者Abbas Kanj
相关产品推荐
相关产品推荐

