我有一个复杂的数据结构,这是一个大致分层的字典,但在某些级别中抛出了一些列表(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...键字符串并计算与上一个示例的差异(如果该键存在于上一个示例中(
感谢所有反馈。