如何在 Python 中计算两个不同数据结构中两个数字节点之间的增量?



我有一个复杂的数据结构,这是一个大致分层的字典,但在某些级别中抛出了一些列表(MongoDB的服务器状态输出(

如何遍历当前数据样本的数据结构,并在数据结构中的某个点找到数字时,计算该数字与前一个样本数据结构中同一点的数字之差?(如果它存在于上一个示例中(

我正在考虑将数据结构转换为 {tag1.tag2.tag3... : value},然后使用 tag1.tag2.tag3...作为执行差异的关键。

提前致谢

好吧,我确信有一种更 Python 的方式来做到这一点,但这就是我想出的。 这是一个递归函数,用于将分层 Python 字典转换为单级字典,键值为类似".key1.key2.key3"的字符串

# Convert MongoDB serverStatus() output from :
# {
#   "host" : "myserver",
#   "version" : "4.x.x",
#   "process" : "mongouser",
#   "pid" : NumberLong(5236),
#   "uptime" : 457766,
#   "uptimeMillis" : NumberLong(457767459),
#   "uptimeEstimate" : NumberLong(457767),
#   "localTime" : ISODate("2020-07-27T21:15:06.901Z"),
#   "asserts" : {
#                 "regular" : 0,
#                 "warning" : 0,
#                 "msg" : 0,
#                 "user" : 458,
#                 "rollovers" : 0
#          ..snip...
# to (numbers below aren't from the same sample)
# {
#   ".host": "myserver",
#   ".version": "4.x.x",
#   ".process": "mongouser",
#   ".pid": 5236,
#   ".uptime": 529644.0,
#   ".uptimeMillis": 529644987,
#   ".uptimeEstimate": 529644,
#   ".localTime": null,
#   ".asserts.regular": 0,
#   ".asserts.warning": 0,
#   ".asserts.msg": 0,
#   ".asserts.user": 458,
#   ".asserts.rollovers": 0,
#   ...snip...
#                 
def py_struct_to_dot_struct(py_struct,dot_struct,dot_struct_key=""):
if( type(py_struct) in [dict] ):
for key in py_struct:
if( type(py_struct[key]) in [dict] ):
py_struct_to_dot_struct( py_struct[key], dot_struct, dot_struct_key+"."+key )
else:
dot_struct[dot_struct_key+"."+key]=py_struct[key]

然后,我可以通过 key1.key2 循环遍历当前示例py_struct...键字符串并计算与上一个示例的差异(如果该键存在于上一个示例中(

感谢所有反馈。

最新更新