私はリストを持っています:v = [1,2,2,3]
。このリストをキーにしたいと思います。私はそれを「手動で」行うことができます:
x = {}
x[1,2,2,3] = 7
だが
x [v] = 7
動作しません。私がする必要があることをする最も簡単な方法は何ですか?
追加した
私はその解決策をそのようなものとして想像します:
x[open(v)] = 7
私はリストを持っています:v = [1,2,2,3]
。このリストをキーにしたいと思います。私はそれを「手動で」行うことができます:
x = {}
x[1,2,2,3] = 7
だが
x [v] = 7
動作しません。私がする必要があることをする最も簡単な方法は何ですか?
追加した
私はその解決策をそのようなものとして想像します:
x[open(v)] = 7
問題は、キーは不変でなければならないということですが、リストは不変ではありません。ただし、タプルはそうです。
v
タプルに変換するだけです。
x[tuple(v)] = 7
詳述すると、上記は書くことと同じです
x[1,2,2,3] = 7
後者は構文上のバリエーションです
x[(1,2,2,3)] = 7
ディクトキーはハッシュ可能でなければなりません。リストはハッシュ可能ではありませんが、タプルはハッシュ可能です。(オブジェクトのハッシュ値は、オブジェクトの存続期間中に変更されるべきではありません。さらに、等しいと比較される2つのハッシュ可能なオブジェクトは同じハッシュを持っている必要があります。リストは可変であるため、両方の条件を満たす唯一の方法は、すべてのリストを返すことです。同じハッシュ値。これを許可してハッシュの目的を覆すのではなく、Pythonはすべての可変コンテナをハッシュ不可にします。)
x[tuple(v)]
x[1,2,2,3]
タプルは括弧ではなくコンマを使用して示されるため、機能します。
In [78]: 1,2,2,3
Out[78]: (1, 2, 2, 3)
Pythonには、値のリストを格納するための2つの類似したデータ構造があります。list
は変更可能なバージョンです。その値は変更できます。
x = [1, 2, 2, 3]
x = list((1, 2, 3, 4))
tuple
不変バージョンです。一度作成すると、その値を変更することはできません。
x = 1, 2, 2, 3
x = (1, 2, 2, 3)
x = tuple((1, 2, 2, 3))
Pythonでは、可変型を辞書キーとして使用できないため、リストにタプルを作成する必要があります。
x[tuple(v)] = 7