使用嵌套值

时间:2018-02-12 20:10:26

标签: python dictionary nested

简而言之,我正在使用如下结构的嵌套字典:

nested_dict = {'key1':{'nestedkey1': 'nestedvalue1'}}

我正在尝试找到一种用嵌套值切换键的pythonic方法,所以它看起来像这样:

nested_dict = {'nestedvalue1':{'nestedkey1': 'key1'}}

我也在尝试重命名嵌套键值,所以最终字典看起来像这样:

nested_dict = {'nestedvalue1':{'NEWnestedkey1': 'key1'}}

这比我正在使用的更接近:

original_dict = {
    'buford': {'id': 1},
    'henley': {'id': 2},
    'emi': {'id': 3},
    'bronc': {'id': 4}
}

我希望它看起来像这样:

new_dict = {
    1: {'pet': 'buford'},
    2: {'pet': 'henley'},
    3: {'pet': 'emi'},
    4: {'pet': 'bronc'}
}

有没有办法使用字典理解在一行中完成此操作?我试图在这里得到基础,避免使用像itertools这样的东西。

2 个答案:

答案 0 :(得分:3)

您可以使用词典理解来实现这一目标,并且交换'在你建造它的过程中:

new_dict = {v['id']: {'pet': k} for k, v in original_dict.items()}

要将其扩展为for循环,它看起来像:

new_dict = {}
for k, v in original_dict.items():
  new_dict[v['id']] = {'pet': k}

请注意,这两种情况显然都依赖于唯一的'id'值,或者每次出现都会覆盖密钥。

答案 1 :(得分:0)

对于更通用的解决方案,您可以尝试:

def replace(d, change_to = 'pet'):
  return {b.values()[0]:{change_to:a} for a, b in d.items()}

输出:

{1: {'pet': 'buford'}, 2: {'pet': 'henley'}, 3: {'pet': 'emi'}, 4: {'pet': 'bronc'}}