4

Python リストにいくつかのエントリがあります。各エントリには作成日と作成時刻があります。値は Python の datetime.date と datetime.time として (2 つの個別のフィールドとして) 保存されます。以前に並べ替えられたエントリのリストを取得する必要があります。作成されたエントリは他のエントリよりも優先されます。

キー関数を受け入れる list.sort() 関数があることは知っています。この場合、日付と時刻を使用して日時を作成し、それをキーとして使用する必要がありますsort()か? これには がありdatetime.datetime.combine(date,time)ます。しかし、これを sort 関数内でどのように指定すればよいでしょうか?

私は試したkey = datetime.datetim.combine(created_date,created_time)

しかし、通訳者はそれを不平を言いますthe name created_date is not defined

class Entry: 
   created_date = #datetime.date
   created_time  = #datetime.time
   ...

my_entries_list=[Entry1,Entry2...Entry10]
my_entries_list.sort(key = datetime.datetim.combine(created_date,created_time))
4

4 に答える 4

8

おそらく次のようなものが必要です。

my_entries_list.sort(key=lambda v:
                           datetime.datetime.combine(v.created_date, v.created_time))

渡すとすぐdatetime.datetime.combine(created_date, created_time)に呼び出そうとし、それ以降中断し、ローカル変数として使用できません。は遅延評価を提供します。コードをすぐに実行する代わりに、呼び出されたときに指定されたコードを実行して結果を返す関数を作成します。この関数は、および属性にアクセスするために使用されるパラメーターも提供します。combinecreated_datecreated_timelambdacreated_datecreated_time

于 2013-01-07T14:58:56.207 に答える
2

使用lambda:

sorted(my_entries_list,
       key=lambda e: datetime.combine(e.created_date, e.created_time))
于 2013-01-07T14:58:52.397 に答える
1

ドキュメントから

keyは、各リスト要素から比較キーを抽出するために使用される1つの引数の関数を指定します

例えば。

def combined_date_key(elem):
    return datetime.datetime.combine(v.created_date, v.created_time)

entries.sort(key=combined_date_key)

(これは、すでに投稿されているラムダと同じですが、わかりやすくするために分割されています)。

もう1つのオプションは、cmp引数を使用することです(ここでは必須ではありませんが、短絡する可能性のある十分に高価なキー関数の場合、これはより高速になる可能性があります)

于 2013-01-07T15:02:27.323 に答える
0

次のようなタプルを使用する方が少し速い場合があります。

sorted(my_entries_list,
       key = lambda e: (e.created_date, e.created_time))

次に、日付で並べ替えられ、日付が一致する場合にのみ時刻が考慮されます。

于 2013-01-07T15:26:15.657 に答える