我有一个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”方式。 (我只是不想这样)
提前致谢。
答案 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
的更多信息