从 dict 获取具有最新日期时间戳的 id
Get id having the latest datetimestamp from dict
我正在寻找具有最新创建 datetimestamp
值的计算机 VM id,
下面是代码,但它 returns 不正确的值 m3
。
def get_machine_id_latest_datetimestamp(self):
thisdict = {
"machines-xyz-123": {
"vm": {
"id": "m1",
"createTimestamp": "2020-11-27T09:44:02.272908941Z",
"status": "running"
}
},
"machines-abc-567": {
"vm": {
"id": "m2",
"createTimestamp": "2020-11-27T23:15:22.212021105Z",
"status": "running"
}
},
"machines-vvy-569": {
"vm": {
"id": "m3",
"createTimestamp": "2020-11-27T22:18:00.572021105Z",
"status": "running"
}
},
"machines-tgh-m4": {
"vm": {
"id": "m4",
"createTimestamp": "2020-11-27T14:01:22.412621105Z",
"status": "running"
}
}
}
machine_id_timestamp_dictionary = {}
machines_count = len(thisdict)
machine = list(thisdict.keys())
for i in range (machines_count):
machine_id = thisdict[machine[i]]["vm"]["id"]
vw_creation_timestamp = \
thisdict[machine[i]]['vm']['createTimestamp']
machine_id_timestamp_dictionary[machine_id] = vw_creation_timestamp
latest_created_machine_id = 0
machine_filtered = set()
for machine_id in machine_id_timestamp_dictionary:
if machine_id_timestamp_dictionary[machine_id] > thisdict[machine[i]]['vm']['createTimestamp']:
latest_created_machine_id = machine_id
machine_filtered.add(latest_created_machine_id)
print("Latest Created Machine ID")
print(latest_created_machine_id)
理想情况下,应返回机器 ID m2
,因为它是最新创建的 ID,代码失败的任何指针?
以下。
这个想法是扫描字典值,将每个日期字符串转换为日期时间并找到最大值。
from datetime import datetime
d = {
"machines-xyz-123": {
"vm": {
"id": "m1",
"createTimestamp": "2020-11-27T09:44:02.272908941Z",
"status": "running"
}
},
"machines-abc-567": {
"vm": {
"id": "m2",
"createTimestamp": "2020-11-27T23:15:22.212021105Z",
"status": "running"
}
},
"machines-vvy-569": {
"vm": {
"id": "m3",
"createTimestamp": "2020-11-27T22:18:00.572021105Z",
"status": "running"
}
},
"machines-tgh-m4": {
"vm": {
"id": "m4",
"createTimestamp": "2020-11-27T14:01:22.412621105Z",
"status": "running"
}
}
}
def _as_dt(x):
return datetime.strptime(x[:19], '%Y-%m-%dT%H:%M:%S')
values = list(d.values())
latest = values[0]['vm']['id']
latest_date = _as_dt(values[0]['vm']['createTimestamp'])
for i in range(1, len(values)):
dt = _as_dt(values[i]['vm']['createTimestamp'])
if dt > latest_date:
latest_date = dt
latest = values[i]['vm']['id']
print(f'Latest vm: {latest}')
输出
Latest vm: m2
由于您有 ISO 格式的时间戳,您可以对字符串进行排序(跳过到日期时间的转换效率更高)。设置 reverse=True
并只选择第一个元素:
# assuming 'd' holds your nested dicts:
sortedDicts = sorted(d.values(), key=lambda d: d['vm']['createTimestamp'], reverse=True)
newestVmId = sortedDicts[0]['vm']['id']
print(newestVmId)
# m2
我正在寻找具有最新创建 datetimestamp
值的计算机 VM id,
下面是代码,但它 returns 不正确的值 m3
。
def get_machine_id_latest_datetimestamp(self):
thisdict = {
"machines-xyz-123": {
"vm": {
"id": "m1",
"createTimestamp": "2020-11-27T09:44:02.272908941Z",
"status": "running"
}
},
"machines-abc-567": {
"vm": {
"id": "m2",
"createTimestamp": "2020-11-27T23:15:22.212021105Z",
"status": "running"
}
},
"machines-vvy-569": {
"vm": {
"id": "m3",
"createTimestamp": "2020-11-27T22:18:00.572021105Z",
"status": "running"
}
},
"machines-tgh-m4": {
"vm": {
"id": "m4",
"createTimestamp": "2020-11-27T14:01:22.412621105Z",
"status": "running"
}
}
}
machine_id_timestamp_dictionary = {}
machines_count = len(thisdict)
machine = list(thisdict.keys())
for i in range (machines_count):
machine_id = thisdict[machine[i]]["vm"]["id"]
vw_creation_timestamp = \
thisdict[machine[i]]['vm']['createTimestamp']
machine_id_timestamp_dictionary[machine_id] = vw_creation_timestamp
latest_created_machine_id = 0
machine_filtered = set()
for machine_id in machine_id_timestamp_dictionary:
if machine_id_timestamp_dictionary[machine_id] > thisdict[machine[i]]['vm']['createTimestamp']:
latest_created_machine_id = machine_id
machine_filtered.add(latest_created_machine_id)
print("Latest Created Machine ID")
print(latest_created_machine_id)
理想情况下,应返回机器 ID m2
,因为它是最新创建的 ID,代码失败的任何指针?
以下。 这个想法是扫描字典值,将每个日期字符串转换为日期时间并找到最大值。
from datetime import datetime
d = {
"machines-xyz-123": {
"vm": {
"id": "m1",
"createTimestamp": "2020-11-27T09:44:02.272908941Z",
"status": "running"
}
},
"machines-abc-567": {
"vm": {
"id": "m2",
"createTimestamp": "2020-11-27T23:15:22.212021105Z",
"status": "running"
}
},
"machines-vvy-569": {
"vm": {
"id": "m3",
"createTimestamp": "2020-11-27T22:18:00.572021105Z",
"status": "running"
}
},
"machines-tgh-m4": {
"vm": {
"id": "m4",
"createTimestamp": "2020-11-27T14:01:22.412621105Z",
"status": "running"
}
}
}
def _as_dt(x):
return datetime.strptime(x[:19], '%Y-%m-%dT%H:%M:%S')
values = list(d.values())
latest = values[0]['vm']['id']
latest_date = _as_dt(values[0]['vm']['createTimestamp'])
for i in range(1, len(values)):
dt = _as_dt(values[i]['vm']['createTimestamp'])
if dt > latest_date:
latest_date = dt
latest = values[i]['vm']['id']
print(f'Latest vm: {latest}')
输出
Latest vm: m2
由于您有 ISO 格式的时间戳,您可以对字符串进行排序(跳过到日期时间的转换效率更高)。设置 reverse=True
并只选择第一个元素:
# assuming 'd' holds your nested dicts:
sortedDicts = sorted(d.values(), key=lambda d: d['vm']['createTimestamp'], reverse=True)
newestVmId = sortedDicts[0]['vm']['id']
print(newestVmId)
# m2