存储化学元素信息实现双向查询应选用哪种合适的数据结构
推荐数据结构方案
你可以同时维护两个独立的字典实现双向查询,逻辑简单、查询效率高,完全匹配你的需求:
- 第一个字典
proton_to_element:键为整数类型的质子数,值为存储对应元素符号和名称的元组,用于响应整数输入的查询 - 第二个字典
query_to_proton:键为字符串类型的元素符号、元素名称(可统一转小写存储兼容用户大小写输入),值为对应元素的质子数,用于响应字符串输入的查询
实现逻辑说明
遍历element.txt文件的每一行时,跳过注释行和空行,将每行按逗号拆分后同时给两个字典赋值即可,实现成本极低。
你也可以直接参考以下Python示例代码:
proton_to_element = {} query_to_proton = {} # 读取元素信息文件 with open("element.txt", "r", encoding="utf-8") as f: for line in f: line = line.strip() # 跳过注释行与空行 if not line or line.startswith("#"): continue proton_str, symbol, name = line.split(",") proton = int(proton_str) # 写入质子数→元素信息的映射 proton_to_element[proton] = (symbol, name) # 写入符号/名称→质子数的映射,统一转小写兼容不同输入格式 query_to_proton[symbol.lower()] = proton query_to_proton[name.lower()] = proton # 查询逻辑示例 user_input = input("请输入质子数/元素符号/元素名称:").strip() try: # 尝试转换为整数,按质子数查询 input_proton = int(user_input) if input_proton in proton_to_element: symbol, name = proton_to_element[input_proton] print(f"查询结果:元素符号 {symbol},元素名称 {name}") else: print("未查询到对应质子数的元素") except ValueError: # 转换失败,按字符串查询 input_str = user_input.lower() if input_str in query_to_proton: print(f"查询结果:对应质子数为 {query_to_proton[input_str]}") else: print("未查询到对应符号/名称的元素")
方案优势
- 所有查询都是O(1)时间复杂度,响应速度快
- 没有复杂的嵌套结构,逻辑清晰易维护,后续扩展元素属性也很方便
- 天然支持大小写容错,用户输入大小写不规范时也能正常匹配
内容的提问来源于stack exchange,提问作者Zy Taga
相关产品推荐
相关产品推荐

