[解決済み] Key-Valueタプルのリストを辞書に変換するには?
質問
次のようなリストがあります。
[('A', 1), ('B', 2), ('C', 3)]
みたいな辞書にしたいんです。
{'A': 1, 'B': 2, 'C': 3}
どうするのが一番いいのでしょうか?
EDIT: 私のタプルのリストは、実際にはもっと似ています。
[(A, 12937012397), (BERA, 2034927830), (CE, 2349057340)]
次のようなエラーが発生します。
ValueError: dictionary update sequence element #0 has length 1916; 2 is required
どのように解決するのですか?
あなたのエラー。
が表示される理由
ValueError: dictionary update sequence element #0 has length 1916; 2 is required
エラーが発生します。
答えは、リストの要素があなたが思っているものと違うからです。もしあなたが
myList[0]
と入力すると、リストの最初の要素が2つのタプルでないことがわかります。
('A', 1)
のような2つのタプルではなく、1916の長さのイテレート可能なものであることがわかります。
一度、あなたが
実際に
は、あなたが最初の質問で述べたような形式のリストを持っています (
myList = [('A',1),('B',2),...]
)、あなたがすべきことは
dict(myList)
.
[2021年編集:今、特定のエラーについての意図された質問ではなく、実際に聞かれた質問にも答えています:] 。
一般的には
を使うか、通常の
dict(iterableOrMapping)
コンストラクタ
を使用するか、または
ディクショナリ
{someExpr(k,v) for k:v in iterable}
という構文になります。
>>> example1 = [('A',1), ('B',2), ('C',3)]
>>> dict(example1)
{'A': 1, 'B': 2, 'C': 3}
>>> {x:x**2 for x in range(3)}
{0: 0, 1: 1, 2:4}
# inline; same as example 1 effectively. may be an iterable, such as
# a sequence, evaluated generator, generator expression
>>> dict( zip(range(2),range(2)) )
{0: 0, 1: 1, 2:2}
A
Python辞書
は、O(1)-search可能で順序のないペアのコレクション{(
k
ey→
v
alue), ...}ここで、キーは任意のイミュータブルオブジェクト、値は任意のオブジェクトである。
キーは
.__eq__()
と
.__hash__()
メソッドを辞書で使用できるようにします。もしこれを実装しようと考えているならば、おそらく何か間違ったことをしているので、別のマッピングデータ構造を検討すべきです! (キーを別のラッパー構造でラップして、通常のdictを使用することで回避できる場合もありますが、これは理想的ではないかもしれません)。
凍結型」または「不変型」、あるいはそれを装った型を実装したい中級または上級プログラマは、含意に非常に注意しなければならず、さもなければ、あなたのプログラムは 非常に微妙で見つけるのがほぼ不可能なバグが発生します。 :
オブジェクトを後で変異させ、その等質性の概念を変更することを許すなら、dict を使用することはできません。等しいと考えられるオブジェクトは、常に
__eq__
が True を返し、かつ
__hash__
は同じ値を返します。
メソッドは仕様に忠実に従わなければなりません。ということです。
-
初心者のために ハッシュ関数(
wikip.
) を使うと、偽陽性や真陽性を得ることができます。
hash(x)==hash(y)
とはx
MIGHT イコールy
で、内部 Python コードがチェックするのはx==y
(.__eq__
) を使って、それが偽陽性でなく真陽性であることを確認します。これにより、O(1)ルックアップが可能になります。 -
初心者のために 非常に重要なのは
__hash__
の値は、オブジェクトが最終的な状態になった後は、いかなる理由でも変更されないことが非常に重要です。 の両方を保証できない場合はhash(x)!=hash(y) implies x!=y
の両方を保証できないのであれば、dictを使うべきではないでしょう。 - を考えるかもしれません。 データ自体を変更するのではなく、別のタイプのマッピングを検討することもできます。 . これは、ライブラリを使用する代償として、ラッパーオブジェクトを書くことと同等になり得ます。これは通常必要ありません。
- 専門家向けです。いくつかのデフォルトオブジェクトのハッシュは salt され、python の起動とバージョン間で変わる可能性があることにも注意すべきです (これは python のハッシュを含む何らかの方法でデータを保存したりネットワーク通信をする場合に困るかもしれません; それらはプロセスの起動ごとに再生成されるべき内部の詳細です)。
Pythonは以下のような組み込みの凍結されたデータ構造をたくさん持っています。
namedtuple
,
frozenset
などがありますが、作業しにくいこともあります。
tuple
は、基本的なフローズン・バリアントである
list
構造体を格納できるようになります)。
{(1, 2): 3, (4, 5): 6}
). また、いくつかのバリエーションがあり
dict
構造もあります。もし、"frozen dicts"から値へのマップを取得したい場合、frozendictはサードパーティのライブラリとしてしか存在しませんが、dictの
.items()
を、順序のない
frozenset
の
tuple
s.
関連
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] 辞書を繰り返し使用するには?
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] 2つのリストを辞書に変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python call matlab メソッドの詳細
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み] 辞書へのタプルのリスト [重複]。