1

これが可能かどうかはわかりませんが、私は sqlalchemy を使用しており、クエリはすべての項目をオブジェクトとして返します。そのオブジェクトのリスト内のアイテムを検索したいのですが、毎回 for ループを実行する必要はありません。

これが私が現在それを行う方法を知っている方法です:

for x in objects_from_query:
    print x.name, ' - ', x.age

リストに「bob」という名前のユーザーのデータがあるかどうかを確認するには、次のようにする必要があります。

for x in objects_from_query:
    if x.name == 'bob':
        print 'bob exists!'

私はこれを何度もやらなければならないので、毎回 for ループを実行することなく bob が存在するかどうかを見つけるためのより速い方法があるかどうか疑問に思っていますか? 通常、リストでは objects_from_query.index("bob") のようなことをしますが、通常のリストの代わりにオブジェクトのリストの場合に似たようなことがありますか?

4

5 に答える 5

4

sqlalchemyを使用している場合は、 Query.filterオブジェクトのメソッドを使用できます。このメソッドは、where句としてSQLに変換されます。次のようなものが機能します:-

    import sqlalchemy as sql

    session = sql.orm.sessionmaker( bind=sql.create_engine( 'sqlite:///sql.db' ) )
    Bob = session.query( Names ).filter( Names.name == "bob" )
于 2012-07-21T21:40:34.377 に答える
3

次のように、bobという名前のすべてのオブジェクトを取得するフィルターはどうですか。

filter(lambda x: x.name == 'bob', objects_from_query)

これはおそらく下でループを実行しますが、それを書くためのより簡潔な方法を探しているなら、これはかなり大丈夫です。

于 2012-07-21T21:39:46.013 に答える
3

最初のものについてはあまり話せませんが、2番目のものについては、このようなものがアプローチを本当にスピードアップする可能性があります

print(x.name == 'bob' in objects_from_query)
于 2012-07-21T21:40:02.540 に答える
3

答え: いいえ。van Emde Boas 、配列、ヒープなどから、使用するデータ構造に関係なく、ループが必要です。

これが、プログラミングを学ぶ必要がある理由です。for ループが必要なものをできるだけ早く見つけるようなデータ構造を見つけることができるようにするためです。

于 2012-07-21T21:34:20.307 に答える
2
>>> class thing():
...   name = ""
...   age = 0
...
>>> [x.age for x in l if x.name == "bob"]
[1]

リスト内包。

于 2012-07-21T21:45:11.417 に答える