python - 如何每行漂亮地打印多个字典条目?
问题描述
我有一本包含许多条目的字典:
d = dict([(i, 'Data') for i in range(100)])
如果我尝试漂亮地打印这些数据
pp = PrettyPrinter(indent=4, width=999)
pp.pprint(d)
它每行只打印一个条目:
{ 0: 'Data',
1: 'Data',
...
99: 'Data'}
但是,我希望它每行打印尽可能多的条目,因为它可以适合width的限制。
像这样的东西:
{ 0: 'Data', 1: 'Data', 2: 'Data',
3: 'Data', 4: 'Data', 5: 'Data',
...
99: 'Data'}
如何使用已经存在的包实现此结果?
解决方案
这并不能真正回答问题,因为它不使用漂亮的打印或其他现有库。它也不考虑边缘情况,例如键或值中的新行,或嵌套/非字符串类型。
d = dict([(i, 'Data') for i in range(20)])
def print_dict(d, col_width=80, sep=','):
if not len(d):
print('{}')
return
def get_str(k, v):
return '%s: %s' % (k, v)
print('{', end='')
items = iter(d.items())
entry = get_str(*next(items))
used_width = len(entry)
print(entry, end='')
for k, v in items:
entry = get_str(k, v)
# if the current entry's string rep will cause an overflow, and the current line
# isn't blank, then go to the next line
new_line = used_width + len(entry) > col_width and used_width > 0
if new_line:
print(f'{sep}\n', end='')
used_width = 0
print((f'{sep} ' if not new_line else '') + get_str(k, v), end='')
used_width += len(entry)
print('}')
print_dict(d)
它只是将尽可能多的项目放在一行中而不会溢出,但在每一行中至少放置一个项目。
{0: Data, 1: Data, 2: Data, 3: Data, 4: Data, 5: Data, 6: Data, 7: Data, 8: Data, 9: Data, 10: Data,
11: Data, 12: Data, 13: Data, 14: Data, 15: Data, 16: Data, 17: Data, 18: Data, 19: Data}
推荐阅读
- flutter - 颤振 | XD 扑关键问题!键key,值为null
- gnu-make - GNU make:在 shell 内无法访问 jenkins 管道的 WithEnv 变量
- c# - 如何在我的条目不为空的情况下初始化我的数组?
- r - 尽管安装了所有 rlang 并更新了 ggplot2 和 tidyverse,为什么会出现 loadNamespace 错误?
- windows - Windows Enterprise PIN 登录防止以后使用 AD 密码
- https - Indy HTTP / HTTPS 服务器是否在 Windows 服务应用程序中工作?
- python - R sapply 在 Python 中的 for 循环等效项
- java - 导入后 Keycloak Realm 中的用户丢失
- kubernetes - 使用自定义 pod 选项在 Kubernetes 中启动交互式 bash 提示
- python - Selenium:选择带有子类别的多个下拉菜单