0

私は次のようなcsvファイルを持っています:

 book_store_id  book_price   name

 1              200.0        foo
 1              320.0        bar
 2              220.0        foobar
 2              280.0        foo

だから..これは巨大なリストです..

今、私は入力が「foo」であるかどうかを調べようとしています

次に、書店ID 1の最低価格が「foo」とマークされているので、「book_store」1を返します。

今、私がこれを行っている方法は、次のようなものを返す転置インデックスを作成することです

foo:1,2 
bar:1
foobar:2

など、そして私が店で本の価格を維持している別の辞書..しかしこれはこれを解決するための最良の方法です。

Pythonでこの問題を解決するための最も効率的な方法は何ですか?

4

2 に答える 2

1

3番目のデータ構造(python dict、データベーステーブルなど)を作成します。

データ構造キーは名前である必要があります(名前が一意であると想定)。

この「名前」がポイントする値は、最低価格である必要があります。

新しい本を挿入するか、本の価格を更新するたびに、3番目のデータ構造で本の最低価格を検索します。最低価格よりも低い場合は、新しい最低価格を設定します。

書籍を削除したり、価格を上げたりする場合は、最小値を更新することを忘れないでください。(別の列を追加して、各本に「現在の最小値」というブール値を付けることができます。その後、値上げ時に、これが当てはまる場合にのみ最小値を更新する必要があります。

問題は、古い最小値を削除するときに、次善の最小値を見つける必要があるということです。

これは、ヒープがあるのが良い場所です

pythonにはheapqの優れた実装があります: http ://docs.python.org/library/heapq.html

それ以外の場合は、すべての値をループして、値上げのたびに新しい最小値を見つける必要があります。または、たとえば、毎回5つの最良の価格を保存する必要があります。

楽しんで :)

于 2012-05-07T01:20:00.377 に答える
0

それはすべてあなたが扱っているデータの量に依存します。量が多すぎない場合、あなたがしていることは問題ありません。

于 2012-05-07T11:34:24.237 に答える