gpt4 book ai didi

Python将包含列表的字典对象转换为包含字典的列表

转载 作者:太空宇宙 更新时间:2023-11-04 08:15:30 25 4
gpt4 key购买 nike

我想这个标题可能会让你有点困惑,但我敢肯定有太多人面临这个问题,而且他们中的大多数人可能都知道如何解决它。

这是我的问题,我有一个如下所示的字典对象:

{   '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'])))

但它对我不起作用。

有没有人向我建议一种更好、更快速、更简单的方法来做到这一点?

问候。

最佳答案

[dict(zip(configSet['fields'], result)) for result in configSet['results']]

对于 results 中的每个结果,使用 fields 中的键和结果中的值生成字典。

In [6]: [dict(zip(configSet['fields'], result)) for result in configSet['results']]
Out[6]:
[{'Config': 23,
'Config Name': 'New test2 for demo',
'Device': 45,
'Device Name': 'New test2 for demo',
'channel': 4,
'date_added': datetime.datetime(2013, 3, 6, 13, 52, 14),
'date_modified': datetime.datetime(2013, 3, 7, 14, 27, 39),
'description': 'Default desc for device',
'enable_password': 'Cisco',
'frequency': 'None',
'ip': '192.168.0.100',
'maxclients': None,
'password': 'Cisco',
'personality': 'ios',
'radius': 13,
'ssid': '0',
'transport_protocol': 'Telnet',
'username': 'Cisco',
'vlan': 0},
{'Config': 23,
'Config Name': 'New test2 for demo',
'Device': 47,
'Device Name': 'Test after a couple hours',
'channel': 4,
'date_added': datetime.datetime(2013, 3, 6, 13, 52, 14),
'date_modified': datetime.datetime(2013, 3, 7, 14, 27, 39),
'description': 'Default desc for device',
'enable_password': 'Cisco',
'frequency': 'None',
'ip': '192.168.0.100',
'maxclients': None,
'password': 'Cisco',
'personality': 'ios',
'radius': 13,
'ssid': '0',
'transport_protocol': 'Telnet',
'username': 'Cisco',
'vlan': 0}]

关于Python将包含列表的字典对象转换为包含字典的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15293903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com