0

これは重複しているとは思いませんが、検索で正しい用語を使用していない可能性があります。これが事実であるならば、私の謝罪。

私が持っているのは、タプル(カスタムオブジェクト、文字列)をfloatにマッピングする辞書です。正確には、2タプルです。私がやろうとしているのは、カスタムオブジェクトに一致するディクショナリ内のすべてのエントリの表現を取得することです。

例:

mydict[(co1, 'hello')] = 0.01
mydict[(co2, 'bye')] = 0.02

ここで、co1とco2は、2つの異なるカスタムオブジェクトを表すことになっています。キーであるタプル内のco1(論理的に同等)を含むすべてのエントリを検索したいと思います。

したがって、私の質問は、文字列が一意の(一致しない)タプルである場合に、この2_tuple=>floatディクショナリをstring=>floatディクショナリに縮小する方法です。

私が試したこと:

for custom in custom_object:
    for k, v in mydict.iteritems():
        if custom in k:
           #store this particular entry into another data structure or otherwise process
4

2 に答える 2

1

内包表記でアンパックを使用できます。

dict((s, v) for (o, s), v in mydict.iteritems() if o is co1)

Python 2.7 から:

{s: v for (o, s), v in mydict.iteritems() if o is co1}
于 2012-08-22T16:19:32.130 に答える
0

コーパス[?]のサイズが大きくなるにつれて、あなたがやろうとしていることは非常に非効率になるようです。

おそらく、代わりにやりたいことは、ハッシュ[0] [1]て3番目の割り当てに入れることです。[2]これは辞書に保存されます。

次に、 tuple の4番目の割り当てにポインターの配列を単純に格納します(Pythonであることは知っていますが、これは複製を使用して実装するのに十分簡単です)[3]

タプルが取り込まれた場合[3](および可能であればその数) を格納する補助構造を保持することにより、ほぼ保証された O(1) でこれらのクエリを実行できるようになります。

  1. すべての繰り返しを列挙する
  2. 0.01 の外観またはなしを列挙する
  3. 私が挿入しているのは重複していますか?

楽しみ:]

于 2012-08-22T16:31:12.840 に答える