从另一个字典更新嵌套字典的所有键

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'])