免责声明:您好所有 Python 大师和粉丝。我要感谢大家的关心支持和宝贵的建议,这对我帮助很大。我是一名 Python 新手,正在努力学习和进步,同时牢记最佳实践的重要性。这是一个问题,我正在寻找一种快速的方法来避免类型检查,就好像我在这里学到了一件事,这不是一件好事,必须有另一种方法来做。
我正在构建一个数据对象来表示站点地图。我希望它在内存中,这样我就可以在查询数据库之前快速映射 URL。
每个节点必须有 2 个元素。一个(网站部分的)名称和一个ID(它在 DB 中的 ID)(通常为 4 到 8 位数字,但这里仅用一位数字表示)。
如果此节点有子节点(在页面上),则它具有名称、ID和另一个代表子节点的字典。
出于性能、易于迭代和记忆的原因,我决定使用以下内容: 我过去尝试只列出 [name, id, [name, id, ..]],字典,我认为这不是这样的不好的方式。
sitemap = {'section_one': 0,
'section_two': [1, {'c_sect_2_1': 10,
'c_sect_2_2': [11, {'c_sect_2_2_1': 110,
'c_sect_2_2_2': 111,
'c_sect_2_2_3': 112}],
'c_sect_2_3': 12,
'c_sect_2_4': 13}],
'section_three': 2,
'section_four': 3,
'section_five': 4}
我选择列表是因为我可能需要修改它们(因此没有元组) 我正在使用字典(可散列)并且我可以轻松检查它们是否包含一个部分。
使用这个数据集和下面的函数,我映射一个 URL(例如 /section_two/c_sect_2_2/c_sect_2_2_3)并查看它是否存在以从数据库中获取数据。我的功能:
def map_url(url): #url here is a list e.g. ['section_two', 'c_sect_2_2', 'c_sect_2_2_3']
sm = sitemap
for e in url:
if e in sm:
if isinstance(sm[e], int):
return sm[e] #e = where it stops matching due to no children
sm = sm[e][1] #if not INT it's a list. list[1] has another dict to go-through
return False #the URL could not be matched-mapped
我的问题是:
- 而不是检查字典中项目的值是否是整数来查看它是否有孩子,我应该怎么做?我能做些什么?
- 什么可能是整个事情的替代品?(数据结构的构建方式和/或通过它的迭代)
我需要这种 url 映射方式,因为我的网站可以有很多嵌套的部分,我不想多次查询数据库来查看它是否存在。
最后,感谢大家宝贵的时间和建议。