python - 如何在python中创建具有某些值的字典
问题描述
我在 Python 中有以下两个列表
此列表包含一行中的标题
['id', 'hostname', 'personality', 'action', 'operational', 'availability']
此列表包含一行中的数据
['| 1 | hostname_1 | master | unlocked | enabled | available |', '| 2 | hostname_2 | slave | unlocked | enabled | available |', '| 3 | hostname_3 | slave | unlocked | enabled | available |']
到目前为止,我还没有找到遍历两个列表以获得以下结果的方法
{'id': {'1': {'action': 'unlocked',
'availability': 'available',
'hostname': 'hostname_1',
'operational': 'enabled',
'personality': 'master'},
'2': {'action': 'unlocked',
'availability': 'available',
'hostname': 'hostname_2',
'operational': 'enabled',
'personality': 'slave'},
'3': {'action': 'unlocked',
'availability': 'available',
'hostname': 'hostname_3',
'operational': 'enabled',
'personality': 'slave'}}}
解决方案
您可以使用字典理解和re
:
import re
_start, *header = ['id', 'hostname', 'personality', 'action', 'operational', 'availability']
data = ['| 1 | hostname_1 | master | unlocked | enabled | available |', '| 2 | hostname_2 | slave | unlocked | enabled | available |', '| 3 | hostname_3 | slave | unlocked | enabled | available |']
new_data = [re.findall('\w+', i) for i in data]
final_results = {_start:{a:dict(zip(header, b)) for a, *b in new_data}}
输出:
{'id': {'1': {'hostname': 'hostname_1', 'personality': 'master', 'action': 'unlocked', 'operational': 'enabled', 'availability': 'available'}, '2': {'hostname': 'hostname_2', 'personality': 'slave', 'action': 'unlocked', 'operational': 'enabled', 'availability': 'available'}, '3': {'hostname': 'hostname_3', 'personality': 'slave', 'action': 'unlocked', 'operational': 'enabled', 'availability': 'available'}}}
编辑:没有 Python3.x 解包:
import re
headers = ['id', 'hostname', 'personality', 'action', 'operational', 'availability']
data = ['| 1 | hostname_1 | master | unlocked | enabled | available |', '| 2 | hostname_2 | slave | unlocked | enabled | available |', '| 3 | hostname_3 | slave | unlocked | enabled | available |']
new_data = [re.findall('\w+', i) for i in data]
final_results = {headers[0]:{i[0]:dict(zip(header, i[1:])) for i in new_data}}
推荐阅读
- html - 溢出:隐藏在 2 个圆圈上
- python - Python:如何根据值列表来定制颜色列表?
- mysql - 存储过程中的 MySQL 案例无法按预期工作
- javascript - 将 Ajax 内容加载到 div (Wordpress) 时未预先加载字体
- javascript - 做出反应。条件渲染
- c# - CS0411:无法从用法中推断方法的类型参数。尝试明确指定类型参数
- sql - 从 SQL Developer 中的存储过程将查询输出写入 .xlsx
- c# - 当 Outlook 2016 使用缓存 Exchange 模式时,GetExchangeUser() 返回 null
- unit-testing - 如何在测试组件中初始化“BehaviorSubject”?
- ruby-on-rails - 编辑创建和保存新对象而不是更新现有对象的操作 - 如何显示错误?