入れ子にされたディクテーションの賛否両論はPythonでタプルをハッシュするのと比べてどうでしょうか?Python - ネストしたdictとタプルをハッシュする
コンテキストは、会議の出席者に「ワークショップ」を割り当てる小さなスクリプトです。
各ワークショップには、いくつかの属性(週、日、件名など)があります。私たちは、各出席者にワークショップを割り当てるためにこれらの属性の4を使用する - すなわち、各代表はまた、私は私のワークショップを保存するために、ネストされた辞書を使用しています、週/日/件名など現在
を持っています:
workshops = defaultdict(lambda: defaultdict(lambda:defaultdict(lambda:defaultdict(dict))))
with open(input_filename) as input_file:
workshop_reader = csv.DictReader(input_file, dialect='excel')
for row in workshop_reader:
workshops[row['Week ']][row['Stream']][row['Strand']][row['Day']] = row
return workshops
私は上記のデータ構造を使用して、各出席者に自分のワークショップを割り当てることができます。
問題は後で、すべてのワークショップを繰り返してID(このIDは別のシステムに格納されています)を割り当てる必要があります。このためには、レイヤーごとに構造をアンラップする必要があります。
最初の質問 - 文字列(ワークショップ名)をキーとして2番目のインデックスを同じ値に作成する方法はありますか?私。私はまだ4つのレベルのネストされた辞書を持っていますが、名前だけに基づいて個々のエントリを検索することもできます。
第2に、タプルをキーとして同様の効果を得るにはどうすればよいですか?このアプローチを使用すると、あなたが考えることができる利点はありますか?はるかにクリーンな、または使いやすいだろうか? (この全体をアンラッピングすることは少し痛みですが、私はそれがとても親切ではないと思います)。
また、アクセス/操作が優れている/簡単になる可能性がある他のデータ構造もありますか?
おかげで、名前はワークショップのユニークな属性(つまり、名前を繰り返すとはワークショップではありません)である場合にのみある ビクター
名前付きタプルは単にデータなので使用しない方がいいですか? –
ええと、それは良い点です。私はそれを考えていたはずです...笑。 そして、私はちょうどクイックルックアップを容易にするために、ワークショップの辞表を作成することができますか?しかし、どのように階層を横断するのですか?たとえば、第1層のすべてのワークショップを取得するために最初のレイヤーに移動する前に、次のレイヤーを展開して1週目のすべてのワークショップを取得します。クラス1を使用してナビゲーションを実行することはできますか? – victorhooi
基本的には、クラスベースの場合、週間/ストランド/ストリームがクラス内のインスタンス属性であると仮定して、特定の週/ストランド/ストリームのすべてのワークショップをリストする簡単な方法はありますか? – victorhooi