[解決済み] 辞書のスライス
2022-02-01 23:28:52
質問内容
私は辞書を持っていて、その一部を関数に渡したいのですが、その部分はキーのリスト(またはタプル)により与えられます。以下のような感じです。
# the dictionary
d = {1:2, 3:4, 5:6, 7:8}
# the subset of keys I'm interested in
l = (1,5)
さて、理想を言えば、こんなことができるようになりたい。
>>> d[l]
{1:2, 5:6}
という名前のキーを探してしまうので、うまくいきません。
(1,5)
.
そして
d[1,5]
は有効なPythonですらありません(便利そうではありますが)。
これができるのは知っています。
>>> dict([(key, value) for key,value in d.iteritems() if key in l])
{1: 2, 5: 6}
またはこれです。
>>> dict([(key, d[key]) for key in l])
よりコンパクトな ... でも、もっといい方法があるような気がします。私はもっとエレガントな解決策を見逃しているのでしょうか?
(Python 2.7を使用しています。)
どのように解決するのですか?
もしキーが存在し、それがdictにない場合は、キー・エラーが発生することになります。
print({k:d[k] for k in l if k in d})
いくつかのタイミング
{k:d[k] for k in set(d).intersection(l)}
In [22]: %%timeit
l = xrange(100000)
{k:d[k] for k in l}
....:
100 loops, best of 3: 11.5 ms per loop
In [23]: %%timeit
l = xrange(100000)
{k:d[k] for k in set(d).intersection(l)}
....:
10 loops, best of 3: 20.4 ms per loop
In [24]: %%timeit
l = xrange(100000)
l = set(l)
{key: d[key] for key in d.viewkeys() & l}
....:
10 loops, best of 3: 24.7 ms per
In [25]: %%timeit
l = xrange(100000)
{k:d[k] for k in l if k in d}
....:
100 loops, best of 3: 17.9 ms per loop
というのは
{k:d[k] for k in l}
は可読性が低く、エレガントでもありませんし、すべての要素がdにあれば、かなり効率的です。
関連
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] 辞書から要素を削除する
-
[解決済み】Pythonで辞書のキーをリストとして返すには?
-
[解決済み】Python辞書の理解力
最新
-
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コンテナのための組み込み汎用関数操作
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
Python Pillow Image.save jpg画像圧縮問題
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】Flaskのテンプレートが見つからない【重複あり