免責事項:すべてのPythonマスターとファンの皆さん、こんにちは。皆さんの思いやりのあるサポートと、私を大いに助けてくれた親愛なるアドバイスに感謝したいと思います。私はPythonの初心者であり、ベストプラクティスの重要性を念頭に置きながら、学び、進歩しようとしています。ここで私がここで学んだことが1つあるかのように、型チェックを回避するための迅速な方法を探している質問があります。それは良いことではなく、別の方法が必要です。
サイトマップを表すデータオブジェクトを作成しています。これをメモリに保存して、DBにクエリを実行する前にURLをすばやくマップできるようにします。
各ノードには2つの要素が必要です。(Webサイトのセクションの)名前とID (DB内のID)(通常は4〜8桁ですが、ここでは1桁のみで表されます)。
このノードに(ページ上に)子がある場合、名前、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)をマップし、それが存在するかどうかを確認して、DBからデータをフェッチします。このための私の機能:
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
私の質問は次のとおりです。
- 辞書の項目の値が整数であるかどうかをチェックして子があるかどうかを確認する代わりに、どうすればよいですか?私に何ができる?
- このすべてに代わるものは何でしょうか?(データ構造の構築方法および/またはデータ構造の反復)
私のウェブサイトにはネストされたセクションがたくさんある可能性があり、DBが存在するかどうかを確認するためだけに、DBに何度もクエリを実行したくないので、このURLマッピングの方法が必要です。
最後に、貴重な時間をありがとうございました。