从另一个字典更新嵌套字典的所有键
Updating all keys of a nested dictionary from another dictionary
我有以下包含大约 1000 个键的嵌套字典:
net_info = {
'17052242':{'lengthkm': 1.555787, 'uparea': 123.23709555834532, 'order': 2,
'strmDrop_t': 231.5, 'unitarea': 123.23709555834532},
'21009006':{'lengthkm': 6.677901703662528,'uparea': 493.8188826654188,
'order': 2,'strmDrop_t': 5.3, 'unitarea': 36.89608111068623},
.
.
.
}
我想添加一个名为 "Q"
的新“特征”,它是我使用预定义函数计算的,该函数使用字典中已存在的 'uparea'
的值。有没有快速的方法来做到这一点?我将为所有现有密钥添加 Q
,没有新密钥。
'Q'
函数的一个例子是:
def discharge(a):
return 0.0229*pow(a,0.8781)
我希望得到的是:
net_info = {
'17052242':{'lengthkm': 1.555787, 'uparea': 123.23709555834532, 'order': 2,
'strmDrop_t': 231.5, 'unitarea': 123.23709555834532,
'Q': 1.569334612348277},
'21009006':{'lengthkm': 6.677901703662528,'uparea': 493.8188826654188,
'order': 2, 'strmDrop_t': 5.3, 'unitarea': 36.89608111068623,
'Q': 5.309544598741915},
.
.
.
}
您可以循环遍历 dict
-
net_info = {
'17052242': {'lengthkm': 1.555787, 'uparea': 123.23709555834532, 'order': 2,
'strmDrop_t': 231.5, 'unitarea': 123.23709555834532},
'21009006': {'lengthkm': 6.677901703662528, 'uparea': 493.8188826654188,
'order': 2, 'strmDrop_t': 5.3, 'unitarea': 36.89608111068623}
}
def discharge(a):
return 0.0229*pow(a, 0.8781)
for k in net_info:
net_info[k]['Q'] = discharge(net_info[k]['uparea']) # beware if the `uparea` key is missing, use dict.get(key, default) instead.
print(net_info)
输出-
{'17052242': {'lengthkm': 1.555787, 'uparea': 123.23709555834532, 'order': 2, 'strmDrop_t': 231.5, 'unitarea': 123.23709555834532, 'Q': 1.569334612348277}, '21009006': {'lengthkm': 6.677901703662528, 'uparea': 493.8188826654188, 'order': 2, 'strmDrop_t': 5.3, 'unitarea': 36.89608111068623, 'Q': 5.309544598741915}}
注意输出中新添加的 Q
值。
for x in net_info.values():
x["Q"] = discharge(x["uparea"])
这会更改 net_info
中的每个值,因为它们是字典 - x
是对字典的引用,而不是字典的副本。如果 net_info
的值是像 int
这样的简单类型,这将不起作用。
或 dict.items()
:
net_info = {
'17052242':{'lengthkm': 1.555787, 'uparea': 123.23709555834532, 'order': 2,
'strmDrop_t': 231.5, 'unitarea': 123.23709555834532},
'21009006':{'lengthkm': 6.677901703662528,'uparea': 493.8188826654188,
'order': 2,'strmDrop_t': 5.3, 'unitarea': 36.89608111068623}
}
def discharge(a):
return 0.0229*pow(a, 0.8781)
for k, v in net_info.items():
net_info[k]['Q'] = discharge(v['uparea'])
我有以下包含大约 1000 个键的嵌套字典:
net_info = {
'17052242':{'lengthkm': 1.555787, 'uparea': 123.23709555834532, 'order': 2,
'strmDrop_t': 231.5, 'unitarea': 123.23709555834532},
'21009006':{'lengthkm': 6.677901703662528,'uparea': 493.8188826654188,
'order': 2,'strmDrop_t': 5.3, 'unitarea': 36.89608111068623},
.
.
.
}
我想添加一个名为 "Q"
的新“特征”,它是我使用预定义函数计算的,该函数使用字典中已存在的 'uparea'
的值。有没有快速的方法来做到这一点?我将为所有现有密钥添加 Q
,没有新密钥。
'Q'
函数的一个例子是:
def discharge(a):
return 0.0229*pow(a,0.8781)
我希望得到的是:
net_info = {
'17052242':{'lengthkm': 1.555787, 'uparea': 123.23709555834532, 'order': 2,
'strmDrop_t': 231.5, 'unitarea': 123.23709555834532,
'Q': 1.569334612348277},
'21009006':{'lengthkm': 6.677901703662528,'uparea': 493.8188826654188,
'order': 2, 'strmDrop_t': 5.3, 'unitarea': 36.89608111068623,
'Q': 5.309544598741915},
.
.
.
}
您可以循环遍历 dict
-
net_info = {
'17052242': {'lengthkm': 1.555787, 'uparea': 123.23709555834532, 'order': 2,
'strmDrop_t': 231.5, 'unitarea': 123.23709555834532},
'21009006': {'lengthkm': 6.677901703662528, 'uparea': 493.8188826654188,
'order': 2, 'strmDrop_t': 5.3, 'unitarea': 36.89608111068623}
}
def discharge(a):
return 0.0229*pow(a, 0.8781)
for k in net_info:
net_info[k]['Q'] = discharge(net_info[k]['uparea']) # beware if the `uparea` key is missing, use dict.get(key, default) instead.
print(net_info)
输出-
{'17052242': {'lengthkm': 1.555787, 'uparea': 123.23709555834532, 'order': 2, 'strmDrop_t': 231.5, 'unitarea': 123.23709555834532, 'Q': 1.569334612348277}, '21009006': {'lengthkm': 6.677901703662528, 'uparea': 493.8188826654188, 'order': 2, 'strmDrop_t': 5.3, 'unitarea': 36.89608111068623, 'Q': 5.309544598741915}}
注意输出中新添加的 Q
值。
for x in net_info.values():
x["Q"] = discharge(x["uparea"])
这会更改 net_info
中的每个值,因为它们是字典 - x
是对字典的引用,而不是字典的副本。如果 net_info
的值是像 int
这样的简单类型,这将不起作用。
或 dict.items()
:
net_info = {
'17052242':{'lengthkm': 1.555787, 'uparea': 123.23709555834532, 'order': 2,
'strmDrop_t': 231.5, 'unitarea': 123.23709555834532},
'21009006':{'lengthkm': 6.677901703662528,'uparea': 493.8188826654188,
'order': 2,'strmDrop_t': 5.3, 'unitarea': 36.89608111068623}
}
def discharge(a):
return 0.0229*pow(a, 0.8781)
for k, v in net_info.items():
net_info[k]['Q'] = discharge(v['uparea'])