python - 如何以漂亮的方式显示包含字典的列表?
问题描述
我有将 linux 上的 multipath.conf 解析为嵌套字典的函数,该字典如下所示:
[{'blacklist': [{'devnode': '"^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"'}, {'devnode': '"^hd[a-z][[0-9]*]"'}, {'devnode': '"^cciss!c[0-9]d[0-9]*"'}]}, {'defaults': [{'user_friendly_names': 'yes'}]}, {'defaults': [{'udev_dir': '/dev'}, {'polling_interval': '10'}, {'selector': '"round-robin 0"'}, {'path_grouping_policy': 'multibus'}, {'getuid_callout': '"/sbin/scsi_id -g -u -s /block/%n"'}, {'prio_callout': 'none'}, {'path_checker': 'readsector0'}, {'rr_min_io': '100'}, {'max_fds': '8192'}, {'rr_weight': 'priorities'}, {'failback': 'immediate'}, {'no_path_retry': 'fail'}, {'user_friendly_names': 'yes'}]}, {'blacklist': [{'wwid': '26353900f02796769'}, {'devnode': '"^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"'}, {'devnode': '"^hd[a-z]"'}]}, {'devices': [{'device': [{'vendor': '"COMPAQ "'}, {'product': '"HSV110 (C)COMPAQ"'}, {'path_grouping_policy': 'multibus'}, {'getuid_callout': '"/sbin/scsi_id -g -u -s /block/%n"'}, {'path_checker': 'readsector0'}, {'path_selector': '"round-robin 0"'}, {'hardware_handler': '"0"'}, {'failback': '15'}, {'rr_weight': 'priorities'}, {'no_path_retry': 'queue'}]}, {'device': [{'vendor': '"COMPAQ "'}, {'product': '"MSA1000 "'}, {'path_grouping_policy': 'multibus'}]}]}]
我需要以“漂亮的格式”再次将其取出,如下所示:
devices {
device {
vendor "COMPAQ "
product "HSV110 (C)COMPAQ"
path_grouping_policy multibus
getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
path_checker readsector0
path_selector "round-robin 0"
hardware_handler "0"
failback 15
rr_weight priorities
no_path_retry queue
}
device {
vendor "COMPAQ "
product "MSA1000 "
path_grouping_policy multibus
}
}
blacklist {
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z][[0-9]*]"
devnode "^cciss!c[0-9]d[0-9]*"
}
and so on the order does not really matter... but the indentations are important to have some
我已经尝试过使用递归函数来“很好地”打印出来,但问题是它是嵌套的……知道如何打印这本字典吗?
解决方案
您可以使用pprint:
import pprint
a = [{'blacklist': [{'devnode': '"^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"'}, {'devnode': '"^hd[a-z][[0-9]*]"'}, {'devnode': '"^cciss!c[0-9]d[0-9]*"'}]}, {'defaults': [{'user_friendly_names': 'yes'}]}, {'defaults': [{'udev_dir': '/dev'}, {'polling_interval': '10'}, {'selector': '"round-robin 0"'}, {'path_grouping_policy': 'multibus'}, {'getuid_callout': '"/sbin/scsi_id -g -u -s /block/%n"'}, {'prio_callout': 'none'}, {'path_checker': 'readsector0'}, {'rr_min_io': '100'}, {'max_fds': '8192'}, {'rr_weight': 'priorities'}, {'failback': 'immediate'}, {'no_path_retry': 'fail'}, {'user_friendly_names': 'yes'}]}, {'blacklist': [{'wwid': '26353900f02796769'}, {'devnode': '"^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"'}, {'devnode': '"^hd[a-z]"'}]}, {'devices': [{'device': [{'vendor': '"COMPAQ "'}, {'product': '"HSV110 (C)COMPAQ"'}, {'path_grouping_policy': 'multibus'}, {'getuid_callout': '"/sbin/scsi_id -g -u -s /block/%n"'}, {'path_checker': 'readsector0'}, {'path_selector': '"round-robin 0"'}, {'hardware_handler': '"0"'}, {'failback': '15'}, {'rr_weight': 'priorities'}, {'no_path_retry': 'queue'}]}, {'device': [{'vendor': '"COMPAQ "'}, {'product': '"MSA1000 "'}, {'path_grouping_policy': 'multibus'}]}]}]
pprint.pprint(a)
给出输出:
[{'blacklist': [{'devnode': '"^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"'},
{'devnode': '"^hd[a-z][[0-9]*]"'},
{'devnode': '"^cciss!c[0-9]d[0-9]*"'}]},
{'defaults': [{'user_friendly_names': 'yes'}]},
{'defaults': [{'udev_dir': '/dev'},
{'polling_interval': '10'},
{'selector': '"round-robin 0"'},
{'path_grouping_policy': 'multibus'},
{'getuid_callout': '"/sbin/scsi_id -g -u -s /block/%n"'},
{'prio_callout': 'none'},
{'path_checker': 'readsector0'},
{'rr_min_io': '100'},
{'max_fds': '8192'},
{'rr_weight': 'priorities'},
{'failback': 'immediate'},
{'no_path_retry': 'fail'},
{'user_friendly_names': 'yes'}]},
{'blacklist': [{'wwid': '26353900f02796769'},
{'devnode': '"^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"'},
{'devnode': '"^hd[a-z]"'}]},
{'devices': [{'device': [{'vendor': '"COMPAQ "'},
{'product': '"HSV110 (C)COMPAQ"'},
{'path_grouping_policy': 'multibus'},
{'getuid_callout': '"/sbin/scsi_id -g -u -s '
'/block/%n"'},
{'path_checker': 'readsector0'},
{'path_selector': '"round-robin 0"'},
{'hardware_handler': '"0"'},
{'failback': '15'},
{'rr_weight': 'priorities'},
{'no_path_retry': 'queue'}]},
{'device': [{'vendor': '"COMPAQ "'},
{'product': '"MSA1000 "'},
{'path_grouping_policy': 'multibus'}]}]}]
或者,您可以使用YAML:
import yaml
print(yaml.dump(a))
输出:
- blacklist:
- devnode: '"^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"'
- devnode: '"^hd[a-z][[0-9]*]"'
- devnode: '"^cciss!c[0-9]d[0-9]*"'
- defaults:
- user_friendly_names: 'yes'
- defaults:
- udev_dir: /dev
- polling_interval: '10'
- selector: '"round-robin 0"'
- path_grouping_policy: multibus
- getuid_callout: '"/sbin/scsi_id -g -u -s /block/%n"'
- prio_callout: none
- path_checker: readsector0
- rr_min_io: '100'
- max_fds: '8192'
- rr_weight: priorities
- failback: immediate
- no_path_retry: fail
- user_friendly_names: 'yes'
- blacklist:
- wwid: 26353900f02796769
- devnode: '"^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"'
- devnode: '"^hd[a-z]"'
- devices:
- device:
- vendor: '"COMPAQ "'
- product: '"HSV110 (C)COMPAQ"'
- path_grouping_policy: multibus
- getuid_callout: '"/sbin/scsi_id -g -u -s /block/%n"'
- path_checker: readsector0
- path_selector: '"round-robin 0"'
- hardware_handler: '"0"'
- failback: '15'
- rr_weight: priorities
- no_path_retry: queue
- device:
- vendor: '"COMPAQ "'
- product: '"MSA1000 "'
- path_grouping_policy: multibus
推荐阅读
- python - plt.savefig() 突出显示图形并使轴变暗?
- javascript - Lightgallery js在引导模式后面显示图像
- reactjs - 我无法立即获得更新的 internalStorage 值来更新我在 Reactjs 中的购物车通知
- python - 如何根据 Python Pandas 列表中的值创建新列?
- amazon-web-services - 预签名 s3 文件时没有这样的存储桶错误
- node.js - Nodemailer 在 less1 秒内发送了两次电子邮件
- pine-script - 当 30 分钟蜡烛收盘时,每 50 美元的高点和低点创建 line.new
- java - 是否可以根据步骤定义返回的数组列表迭代一组特征文件行
- java - 如何在 RTL 模式下的视图寻呼机中实现立方体效果?
- javascript - 编辑csv文件nodejs电子中的一行