将一个字典映射到python中的新字典

时间:2014-05-09 07:04:11

标签: python dictionary

我有一个dict对象:

device = {
                "id": device_object.id,
                "name": device_object.device_name,
                "children": [],
                "alias": device_object.device_alias,
                "device_type": device_type,
                "mac": device_object.mac_address,
                "current_state": device_object.host_state,
                "vendor": device_vendor
              }

我希望这个设备dict映射到另一个字典,即master_device:

master_device = {
                "id": device_object.id,
                "name": device_object.device_name,
                "children": [],
                "data": {
                        "alias": device_object.device_alias,
                        "device_type": device_type,
                        "mac": device_object.mac_address,
                        "current_state": device_object.host_state,
                        "vendor": device_vendor,
                        }

其中具有键data的子文档中的所有字段都是从device dict映射的。

实现这一目标的“一线”方式是什么?

P.S。:我不希望它像:

for (k, v) in device.iteritems():
    if k not in ["id", "name", "children"]:
        new_dict.update({k: v})

或其他一些“for-loop”方式。 (我只是不想这样)

提前致谢。

2 个答案:

答案 0 :(得分:4)

也许这种做法?

device, master_device = {....}, {}
#for key in ['id', 'name']:
#    master_device[key] = device.pop(key)

#master_device['data'] = device


# if no 'loop'
master_device = {'id': device.pop('id'), 'name': device.pop('name'), 'data': device}

答案 1 :(得分:0)

这就是我所得到的:

new_dict = ChainMap({'data': {k:device[k] for k in master_device['data'].keys()}}, master_device)

似乎令人费解,但至少它是一个单行! : - )

这适用于Python 3.3。有关ChainMap here

的更多信息