如何根据键值和嵌套值

时间:2018-02-18 21:23:49

标签: 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: {'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}

理想情况下,我想构建这个函数,以便能够处理如上所述的嵌套字典,但我不确定如何处理迭代嵌套元素。

3 个答案:

答案 0 :(得分:2)

您可以使用词典理解:

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()}

输出:

{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}}

编辑:无法理解:

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 :(得分:1)

可以执行此操作的功能如下:

代码:

def add_new_value_from_key_value(a_dict, key_add_from, key_to_add):
    a_dict = a_dict.copy()
    for k, v in a_dict.items():
        v[key_to_add] = k + v[key_add_from]
    return a_dict

测试代码:

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}
}

print(add_new_value_from_key_value(current_dict, 'int1', 'int2'))
assert new_dict == add_new_value_from_key_value(current_dict, 'int1', 'int2')

结果:

{
    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 :(得分:0)

这应该有效:

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