1

タプル キーを持つ Python ディクショナリの場合、タプル要素の 1 つが単一の値に設定されているディクショナリの部分だけを表示するにはどうすればよいでしょうか。次に、それらの要素の削除も検討しています。

たとえば、辞書

testTrak = {(0,1): '+', (0,2): '-', (1,1): '34.0', (1,2): 'test'}

そして、の最初の番号を持つ要素のみをリストしたいtuple = 1; つまり(1,*)、アスタリスクがワイルドカードを表す場所だけをリストしたいということです。したがって、 と のみ (1,1): '34.0'(1,2): 'test'リストされます。

ある種のスライスが機能するはずですが、表示されません。

4

2 に答える 2

1

申し訳ありませんが、私はあなたの質問を読み違えました。ほぼすべての Python バージョンに必要なソリューションは次のとおりです。

>>> testTrak = {(0,1): '+', (0,2): '-', (1,1): '34.0', (1,2): 'test'}
>>> dict([(key, value) for key, value in testTrak.items() if key[0] == 1])
{(1, 2): 'test', (1, 1): '34.0'}

Python 2.7+ では、より簡潔なバージョンを書くことができます:

>>> testTrak = {(0,1): '+', (0,2): '-', (1,1): '34.0', (1,2): 'test'}
>>> {key:value for key, value in testTrak.items() if key[0] == 1}
{(1, 2): 'test', (1, 1): '34.0'}

これがコメントで尋ねたものである場合、アイテムを除外することは、if句を否定するだけの問題です。

>>> testTrak = {(0,1): '+', (0,2): '-', (1,1): '34.0', (1,2): 'test'}
>>> {key:value for key, value in testTrak.items() if key[0] != 1}
{(0, 1): '+', (0, 2): '-'}
于 2012-05-24T20:41:03.243 に答える
1

必要なのはプレフィックス ツリーですが、辞書にはそれが組み込まれていません。いくつかのオプションがあります。

  1. で辞書キーをフィルタリングできますiterkeys()。これは線形時間の複雑さを持ち、辞書が大きい場合は非常に非効率的です。

  2. メモリが問題でない場合 - 2 つの辞書を作成します。1 つはタプルごと、もう 1 つはリストへの最初のメンバー マッピングごとです。高速ですが、メモリが重いです。

  3. 理想的なアプローチは、プレフィックス ツリー データ構造を使用することです。私はそれを行うための適切な python モジュールを知りません (仕事用に書いたことがありますが、オープンソースではありません) が、確かにあると思います。

于 2012-05-24T20:41:29.483 に答える