Python 如何基于键值和嵌套值编辑嵌套字典中的值

Python 如何基于键值和嵌套值编辑嵌套字典中的值,python,dictionary,nested,Python,Dictionary,Nested,我正在尝试创建一个函数,该函数将遍历嵌套字典,将一个键的值添加到一个嵌套值,并创建一个新的嵌套键-值对。例如,这个输入: current_dict = {1: {'int1': 11}, 2: {'int1': 12}, 3: {'int1': 13}, 4: {'int1': 14}, 5: {'int1': 15}} 将显示如下输出: new_dict = {1: {'int1': 11, 'int2': 12}, 2: {'int1': 12, 'int2', 14}, 3: {'i

我正在尝试创建一个函数,该函数将遍历嵌套字典,将一个键的值添加到一个嵌套值,并创建一个新的嵌套键-值对。例如,这个输入:

current_dict = {1: {'int1': 11}, 2: {'int1': 12}, 3: {'int1': 13}, 4: {'int1': 14}, 
5: {'int1': 15}}
将显示如下输出:

new_dict = {1: {'int1': 11, 'int2': 12}, 2: {'int1': 12, 'int2', 14}, 
3: {'int1': 13, 'int2', 16}, 4: {'int1': 14, 'int2': 18}, 5: {'int1': 15, 'int2', 20}}
我使用的是一个非嵌套字典,类似于添加键值对,使用以下方法创建新值:

int_dict = {1: 11, 2: 12, 3: 13, 4: 14, 5: 15}
new_dict2 = {}

def func2(k, v):
    new_k = k + v
    return new_k

for k, v in integer_dictionary.items():
    new_dict2[k] = func2(k, v)
并返回以下内容:

{1: 12, 2: 14, 3: 16, 4: 18, 5: 20}
理想情况下,我希望构建此函数,以便能够处理上述嵌套字典,但我不确定如何处理对嵌套元素的迭代。

这应该可以:

current_dict = {1: {'int1': 11}, 2: {'int1': 12}, 3: {'int1': 13}, 4: {'int1': 14}, 5: {'int1': 15}}

new_dict = current_dict.copy()

for k, v in new_dict.iteritems():
    v['int2'] = v['int1'] + k

可以这样做的函数可能如下所示:

代码: 测试代码: 结果:
您可以使用字典理解:

current_dict = {1: {'int1': 11}, 2: {'int1': 12}, 3: {'int1': 13}, 4: {'int1': 14}, 5: {'int1': 15}}
new_dict = {a:{**b, 'int2':b['int1']+a} for a, b in current_dict.items()}
def funct2(k, v):
     return {**v, 'int2':v['int1']+k} 

for a, b in current_dict.items():
   current_dict[a] = funct2(a, b)
输出:

{1: {'int1': 11, 'int2': 12}, 2: {'int1': 12, 'int2': 14}, 3: {'int1': 13, 'int2': 16}, 4: {'int1': 14, 'int2': 18}, 5: {'int1': 15, 'int2': 20}}
{1: {'int1': 11, 'int2': 12}, 2: {'int1': 12, 'int2': 14}, 3: {'int1': 13, 'int2': 16}, 4: {'int1': 14, 'int2': 18}, 5: {'int1': 15, 'int2': 20}}
编辑:不理解:

current_dict = {1: {'int1': 11}, 2: {'int1': 12}, 3: {'int1': 13}, 4: {'int1': 14}, 5: {'int1': 15}}
new_dict = {a:{**b, 'int2':b['int1']+a} for a, b in current_dict.items()}
def funct2(k, v):
     return {**v, 'int2':v['int1']+k} 

for a, b in current_dict.items():
   current_dict[a] = funct2(a, b)
输出:

{1: {'int1': 11, 'int2': 12}, 2: {'int1': 12, 'int2': 14}, 3: {'int1': 13, 'int2': 16}, 4: {'int1': 14, 'int2': 18}, 5: {'int1': 15, 'int2': 20}}
{1: {'int1': 11, 'int2': 12}, 2: {'int1': 12, 'int2': 14}, 3: {'int1': 13, 'int2': 16}, 4: {'int1': 14, 'int2': 18}, 5: {'int1': 15, 'int2': 20}}

谢谢你的帮助,这很有用。有没有一种不用字典作为输入的方法?我正在做一些编辑,我想写它,所以它只需要2个整数作为输入(即一个键和一个值)。你不需要dict来获得你需要的查找值吗?有没有一种方法可以在不使用dict理解的情况下实现这一点?所以,基本上是相同的结构,但只是通过使用for循环?谢谢你把这个放在一起。很抱歉,还有其他问题,但是这个函数如何工作?我是python新手,所以我试图弄清楚如何将两个值(即一个键和一个值)传递到函数中,然后使用组合在一起的for循环迭代所有内容。我想知道如何使它尽可能接近我上面使用的脚本:def func2(k,v):new_k=k+v返回new_k for k,v in integer_dictionary.items():new_dict2[k]=func2(k,v)@David很高兴提供帮助!请看我最近的编辑。我将原始的
funct2
函数与循环合并。