删除嵌套键并将值移到主字典键

2024-04-24 15:56:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,当我试图合并两个字典,以适合以后发表一篇文章。由于某些原因,get似乎是嵌套的,我不知道如何清理它。如果能得到一些关于优化代码的提示也很好,现在看起来有点乱。在

    for network in networks:

            post_dict = {e1:e2 for e1,e2 in network['extattrs'].iteritems() if e1 not in keys }
            pprint (post_dict['Stuff-Name']['value'])

            post_dict['name'] = post_dict.pop('Stuff-Name')
            post_dict['sid'] = post_dict.pop('Stuff-id')

            dict_to_post = merge_two_dicts(post_dict, default_keys)

网络:

^{pr2}$

默认密钥:

default_keys = {'status':'Active',
                'group':None,
                'site':'City-A',
                'role':'Production',
                'description':None,
                'custom_fields':None,
                'tenant':None}

听写后:

{'name': {u'value': u'Name of object'},
 'sid': {u'value': 110}}

所以我想实现的是去掉嵌套键(在键“name”和“sid”中),所以键和值对应该是“name:name of object”和“sid:110”

post函数尚未定义。在


Tags: nameinnoneforvaluenetworkkeyspost
2条回答

要获得任何嵌套字典的第一个值,可以使用

d = {'custom_fields': None, 'description': None, 'group': None, 'name': 
{'value': 'Name of object'}, 'role': 'Production', 'site': 'City-A', 
'status': 'Active', 'tenant': None, 'sid': {'value': 110}}

for key in d.keys():
  if type(d[key]) == dict:
    d[key] = d[key].popitem()[1]

它回来了

^{pr2}$

我认为正是这一步首先导致了词典的嵌套

post_dict['name'] = post_dict.pop('Stuff-Name')
post_dict['sid'] = post_dict.pop('Stuff-id')

如果只需要字典的值而不需要键,可以在这里尝试popitem()[1]。在

据我所知,你的情况非常具体,我可能会选择一个简单而肮脏的解决方案。首先你试过这个:

post_dict['name'] = (post_dict.pop('Stuff-Name'))['value']

其次,如何利用“过滤和重命名”和折叠索引在那里?这是不可取的,但如果你想做一个懒散的工作,这就足够了。我建议你采纳我的第一个建议,因为我相信这会解决你的问题。在

相关问题 更多 >