以有效的方式删除字典的键(日期时间对象)
Deleting Keys (datetime objects) of dict in efficient way
我有一个(嵌套的)字典。键是日期时间对象。我试图只保留最新的项目,在这种情况下,应该删除超过 60 秒的所有内容。
由于应用程序时间紧迫,我正在寻找更快的解决方案。我怀疑我的解决方案是 good/fast 或者认为有更快的解决方案。
谁能告诉我如何解决它,而不是节省一些步骤和时间。
代码:
import datetime
import copy
test = {'record1': {datetime.datetime(2021, 9, 14, 1, 3, 3, 781905): 'A', datetime.datetime(2021, 9, 14, 1, 4, 3, 876008): 'B', datetime.datetime(2021, 9, 14, 1, 36, 6, 557661): 'C' }}
dict2 = copy.deepcopy(test)
keys = dict2["record1"].keys()
compare = datetime.datetime.now() - datetime.timedelta(seconds=60)
for key in keys:
if key >= compare:
print(key)
else:
del test['record1'][key]
print(test)
输出:
2021-09-14 01:36:06.557661
{'record1': {datetime.datetime(2021, 9, 14, 1, 36, 6, 557661): 'C'}}
您不必制作 deepcopy
字典 - 您可以使用带过滤的字典理解。例如:
import datetime
test = {
"record1": {
datetime.datetime(2021, 9, 14, 0, 3, 3, 781905): "A",
datetime.datetime(2021, 9, 14, 0, 4, 3, 876008): "B",
datetime.datetime(2021, 9, 14, 0, 7, 6, 557661): "C",
}
}
compare = datetime.datetime.now() - datetime.timedelta(seconds=60)
test = {
k: {kk: vv for kk, vv in v.items() if kk > compare} for k, v in test.items()
}
print(test)
打印:
{'record1': {datetime.datetime(2021, 9, 14, 0, 7, 6, 557661): 'C'}}
我有一个(嵌套的)字典。键是日期时间对象。我试图只保留最新的项目,在这种情况下,应该删除超过 60 秒的所有内容。
由于应用程序时间紧迫,我正在寻找更快的解决方案。我怀疑我的解决方案是 good/fast 或者认为有更快的解决方案。
谁能告诉我如何解决它,而不是节省一些步骤和时间。
代码:
import datetime
import copy
test = {'record1': {datetime.datetime(2021, 9, 14, 1, 3, 3, 781905): 'A', datetime.datetime(2021, 9, 14, 1, 4, 3, 876008): 'B', datetime.datetime(2021, 9, 14, 1, 36, 6, 557661): 'C' }}
dict2 = copy.deepcopy(test)
keys = dict2["record1"].keys()
compare = datetime.datetime.now() - datetime.timedelta(seconds=60)
for key in keys:
if key >= compare:
print(key)
else:
del test['record1'][key]
print(test)
输出:
2021-09-14 01:36:06.557661
{'record1': {datetime.datetime(2021, 9, 14, 1, 36, 6, 557661): 'C'}}
您不必制作 deepcopy
字典 - 您可以使用带过滤的字典理解。例如:
import datetime
test = {
"record1": {
datetime.datetime(2021, 9, 14, 0, 3, 3, 781905): "A",
datetime.datetime(2021, 9, 14, 0, 4, 3, 876008): "B",
datetime.datetime(2021, 9, 14, 0, 7, 6, 557661): "C",
}
}
compare = datetime.datetime.now() - datetime.timedelta(seconds=60)
test = {
k: {kk: vv for kk, vv in v.items() if kk > compare} for k, v in test.items()
}
print(test)
打印:
{'record1': {datetime.datetime(2021, 9, 14, 0, 7, 6, 557661): 'C'}}