向 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}}}]
我有一个列表嵌套字典,看起来如下所示,并且我有一个作为变量存储的纪元时间戳。
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}}}]