Pythonの階層構造(ファイル構造に似ています)をハッシュする良い方法はありますか?Pythonハッシュ関数
階層全体を点列に変換してハッシュすることができましたが、これまでずっと前後しないでこれを行う方が良い(または効率的な)方法がありますか?
私はハッシュしたい場合があります構造の例は次のとおりです。
a -> b1 -> c -> 1 -> d
a -> b2 -> c -> 2 -> d
a -> c -> 1 -> d
Pythonの階層構造(ファイル構造に似ています)をハッシュする良い方法はありますか?Pythonハッシュ関数
階層全体を点列に変換してハッシュすることができましたが、これまでずっと前後しないでこれを行う方が良い(または効率的な)方法がありますか?
私はハッシュしたい場合があります構造の例は次のとおりです。
a -> b1 -> c -> 1 -> d
a -> b2 -> c -> 2 -> d
a -> c -> 1 -> d
あなたはタプルとして階層コンポーネントへのアクセスを持っている場合は、ちょうどそれをハッシュ - タプルはハッシュ可能です。区切られた文字列との間で変換を行うことはあまりないかもしれませんが、それは始まりです。
この方法で問題が解決しない場合は、おそらく階層/パス情報の保存方法に関する詳細情報を提供することができます。
+1。 Pythonはjavascriptではなく、辞書キーは単なる文字列以上のものです。残念ながら、それはLuaでもなく、鍵は_any_ value – Javier
あなたは、単に、例えば、あなたの階層を格納するオブジェクトに適し__hash__()
メソッドを追加することができますので、__hash__()
method
を実装することにより、任意のオブジェクトのハッシュ可能にすることができます再帰的にハッシュを計算するなど。
どのように階層にアクセスしますか?
あなたは常に提案のように、完全なパスをチェックするつもりなら、タプルを使用します。 例:
>>> d["a","b1","c",1,"d"] = value
しかし、あなたはすぐに「のようなものをやっているつもりなら"a - > b1"の下にあるすべてのアイテムを見つけると、それをネストされたハッシュテーブルとして格納する方が意味があるかもしれません(そうでなければ、あなたが入れ墨したものを見つけるためにすべてのアイテムを繰り返す必要があります)。
たとえば、次のようにdefaultdictを格納するのが最も簡単な方法です:
from collections import defaultdict
def new_dict(): return defaultdict(new_dict)
d = defaultdict(new_dict)
d["a"]["b1"]["c"][1]["d"] = "test"
d["a"]["b2"]["c"][2]["d"] = "test2"
d["a"]["c"][1]["d"] = "test3"
print d["a"]["c"][1]["d"] # Prints test3
print d["a"].keys() # Prints ["c", "b1", "b2"]
階層構造では、単一のファイルのパスコンポーネントのリスト、つまり["usr"、 "local"、 "test"、 "myfile"]を意味しますか? – DNS
ダウンモードでは、質問は非常に不明瞭で混乱しています。 – ddaa
は少し明確にするための例を追加しました... – Dan