我想这个标题可能会让你有点困惑,但我敢肯定有太多人面临这个问题,而且他们中的大多数人可能知道如何解决它。
这是我的问题,我有一个 dict 对象,如下所示:
{ 'fields':
['Config', 'Device', 'Device Name', 'Config Name', 'description', 'ip', 'radius', 'ssid','vlan', 'channel', 'frequency', 'maxclients', 'username', 'password', 'enable_password','transport_protocol', 'personality', 'date_added', 'date_modified'],
'results': [
[23, 45, 'New test2 for demo', 'New test2 for demo', 'Default desc for device','192.168.0.100',13, '0', 0, 4, 'None', None, 'Cisco', 'Cisco', 'Cisco', 'Telnet', 'ios',datetime.datetime(2013, 3, 6, 13, 52, 14), datetime.datetime(2013, 3, 7, 14, 27, 39)],
[23, 47, 'Test after a couple hours', 'New test2 for demo', 'Default desc for device','192.168.0.100', 13, '0', 0, 4, 'None', None, 'Cisco', 'Cisco', 'Cisco', 'Telnet', 'ios',datetime.datetime(2013, 3, 6, 13, 52, 14), datetime.datetime(2013, 3, 7, 14, 27, 39)]
]
}
我想将它转换成一个列表,包括这样的 dict 对象:
[
{'username': 'Cisco', 'transport_protocol': 'Telnet', 'Device Name': 'With a fresh breath','description': 'Default desc for device', 'date_added': datetime.datetime(2013, 3, 8, 9, 32, 13),'date_modified': datetime.datetime(2013, 3, 8, 9, 32, 13), 'ip': '192.168.0.100', 'vlan': 0,'enable_password': 'Cisco', 'Config Name': 'With a fresh breath', 'frequency': '0', 'radius': 0, 'personality': 'ios', 'Device': 49, 'maxclients': 0, 'password': 'Cisco', 'Config': 27, 'channel': 0, 'ssid': 'LBREAP'},
{'username': 'Cisco', 'transport_protocol': 'Telnet', 'Device Name': 'With a fresh breath for second device', 'description': 'Default desc for device', 'date_added': datetime.datetime(2013, 3, 8, 9, 33, 57), 'date_modified': datetime.datetime(2013, 3, 8, 11, 23, 1), 'ip': '192.168.0.35', 'vlan': 0, 'enable_password': 'Cisco', 'Config Name': 'With a fresh breath for second device', 'frequency': '0', 'radius': 0, 'personality': 'ios', 'Device': 50, 'maxclients': 0, 'password': 'Cisco', 'Config': 28, 'channel': 4, 'ssid': 'LBREAP'}
]
我需要将顶部对象字段映射为带有列表的第二个对象键。我写了一个简单的 for 来制作第二个并且它可以工作,我已经用这个创建了第二个 for,但我很好奇有一种简单的方法可以让它工作。
这是我的循环:
results = list()
if configSet['results']:
k = 0
for i in configSet['results']:
rSet = {}
r = 0
for f in i:
rSet[configSet['fields'][r]] = f
r += 1
results.insert(k, rSet)
k += 1
我尝试像这样处理 dict、list、map 和 zip 组合
dict(map(list, zip(configSet['fields'], configSet['results'])))
但这对我不起作用。
有没有人向我建议一种更好、更快、更简单的方法来做到这一点?
问候。