向 python 中的嵌套字典添加新元素

Adding a new element to a nested dictionary in python

我有一个列表嵌套字典,看起来如下所示,并且我有一个作为变量存储的纪元时间戳。

ts = 1653070640

   [ 
      {
        "HR": {
            "EKG": {
                "HR_EKG": 136.0
            },
            "PPG": {
                "HR_PPG_1": 135.0,
                "HR_PULSED": 135.0
            }
        },
        "NIBP": {
            "DBP": {
                "NIBPD": 25.0
            },
            "MBP": {
                "NIBPM": 53.0
            },
            "SBP": {
                "NIBPS": 73.0
            }
        },
        "SPO2": {
            "PI": {
                "PI_1": 4.25
            },
            "SPO2": {
                "SpO2_1": 86.0
            }
        }
    } 
 ]

我想做的是将ts变量作为新键添加到最内层的嵌套字典中。嵌套字典的长度可能会有所不同,所以我想这应该是一种递归方法。

    [ 
      {
        "HR": {
            "EKG": {
                "HR_EKG": 136.0
                "timestamp": 1653070640

            },
            "PPG": {
                "HR_PPG_1": 135.0,
                "HR_PULSED": 135.0,
                "timestamp": 1653070640
            }
        },
        "NIBP": {
            "DBP": {
                "NIBPD": 25.0,
                "timestamp": 1653070640
            },
            "MBP": {
                "NIBPM": 53.0,
                "timestamp": 1653070640
            },
            "SBP": {
                "NIBPS": 73.0,
                "timestamp": 1653070640
            }
        },
        "SPO2": {
            "PI": {
                "PI_1": 4.25,
                "timestamp": 1653070640
            },
            "SPO2": {
                "SpO2_1": 86.0,
                "timestamp": 1653070640
            }
        }
    }  
]

我试过的是以下打印所有键的函数,但不确定如何将新键添加到最里面的字典。

def get_all_keys(d):
  for key, value in d.items():
     yield key
     if isinstance(value, dict):
        yield from get_all_keys(value)

您可以这样做以仅在没有 sub-dicts 的深度添加 timestamp:

def set_ts(d, ts):
    any_nested = False
    for k, v in d.items():
        if isinstance(v, dict):
            set_ts(v, ts)
            any_nested = True
    if not any_nested:
        d['timestamp'] = ts

用法:

for d in dl:
    set_ts(d, ts)

>>> dl
[{'HR': {'EKG': {'HR_EKG': 136.0, 'timestamp': 1653070640},
   'PPG': {'HR_PPG_1': 135.0, 'HR_PULSED': 135.0, 'timestamp': 1653070640}},
  'NIBP': {'DBP': {'NIBPD': 25.0, 'timestamp': 1653070640},
   'MBP': {'NIBPM': 53.0, 'timestamp': 1653070640},
   'SBP': {'NIBPS': 73.0, 'timestamp': 1653070640}},
  'SPO2': {'PI': {'PI_1': 4.25, 'timestamp': 1653070640},
   'SPO2': {'SpO2_1': 86.0, 'timestamp': 1653070640}}}]