Linuxでcronを使用してPythonスクリプトを実行しようとしています。これにより、データのディクショナリが構築されます。ディクショナリのキーとしてdatetime().now().time()
を使用しようとしていますが、エラーが発生するようです。
datetime
型をPythonの辞書キーとして使用することはできませんか?その場合、私の選択肢は何ですか?
コード:
time_now = dt.datetime.now().time()
date_today = dt.datetime.now().date()
usage_dict_hourly = {}
date_wise_dict = {}
def constructing_dict(data_int):
date_wise_dict[usage_dict_hourly[time_now]] = data_int
print date_wise_dict
エラー:
<ipython-input-9-ef6a500cc71b> in constructing_dict(data_int)
36
37 def constructing_dict(data_int):
---> 38 date_wise_dict[usage_dict_hourly[time_now]] = data_int
39 print date_wise_dict
40
KeyError: datetime.time(22, 40, 33, 746509)
辞書キーとしての日時に関する質問への回答:
はい、datetimeのtimeオブジェクトを辞書キーとして使用できます。
オブジェクトを辞書キーとして使用するための条件:
辞書キーとして使用するには、オブジェクトはハッシュ関数(
__hash__
など)、等価比較(__eq__
または__cmp__
)(...)をサポートしている必要があります。
(出典: DictionaryKeys )
引用された条件の日時サポート:
サポートされている操作:
.。
- ハッシュ、dictキーとして使用
(出典: datetime --timeオブジェクト )
ただし、dict usage_dict_hourly
が空であるため、この例外が発生します。
usage_dict_hourly
は{}
で開始されます。したがって、関数time_now
でキーconstructing_dict
を持つ要素を検索しようとすると、そのキーが見つからないため、KeyError
例外が発生します。
実際には、useage_dict_hourly
をそのように設定しているわけではありません。これは、エラーです。理想的には、次のようなことを行う必要があります。
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
または、さらに良いことに、キーとしてdatetime.datetime.now()を使用するだけです。
datetime_wise_date[datetime.datetime.now()] = data_int.
このように、値が衝突する可能性はありません(useage_dict_hourlyの場合、可能性は低いですが)。