python - 以紧凑的方式打印大型嵌套字典的结构,而无需打印所有元素

标签 python dictionary printing

我有一个很大的嵌套字典,我想在每一层打印它的结构和一个示例元素。

例如:

from collections import defaultdict
nested = defaultdict(dict)
for i in range(10):
  for j in range(20):
    nested['key'+str(i)]['subkey'+str(j)] = {'var1': 'value1', 'var2': 'value2'}

如果我使用 pprint 漂亮地打印它,我将得到所有很长的元素,部分输出将如下所示:

from pprint import pprint
pprint(nested)

        {'key0': {'subkey0': {'var1': 'value1', 'var2': 'value2'},
          'subkey1': {'var1': 'value1', 'var2': 'value2'},
          'subkey10': {'var1': 'value1', 'var2': 'value2'},
          'subkey11': {'var1': 'value1', 'var2': 'value2'},
          'subkey12': {'var1': 'value1', 'var2': 'value2'},
          'subkey13': {'var1': 'value1', 'var2': 'value2'},
          'subkey14': {'var1': 'value1', 'var2': 'value2'},

是否有内置方法或库来在每个级别中仅显示少数顶级元素,并用 '...' 表示其余元素以紧凑的方式显示整个字典?类似于以下内容('...' 也将被打印):

期望的输出,每个级别只有 1 个示例:

{'key0': {
  'subkey0': {
    'var1: 'value1', 
    '...'
    },
  '...'
  },
  '...'
}

对于列表,我找到了 this solution , 但我没有找到嵌套字典的任何内容。

最佳答案

一个基本的解决方案是设置您自己的嵌套函数,该函数将循环遍历并检测值以仅打印它从每个值中找到的第一个项目。由于字典没有排序,这意味着它会随机选择一个。因此,如果您希望智能地分离不同类型的示例,那么您的目标本身就很复杂。

但基本功能的工作方式如下:

def compact_print(d, indent=''):
    items = d.items()
    key, value = items[0]
    if not indent:
        print("{")

    if isinstance(value, dict):
        print(indent + "'{}': {{".format(key))
        compact_print(value, indent + ' ')
        print(indent + "'...'")
    else:
        print(indent + "'{}': '{}',".format(key, value))
        print(indent + "'...'")
    print(indent + "}")

这个嵌套函数只是遍历它找到的任何字典,并继续忽略它获取的第一个项目。您可以使用 elif isinstance(value, list) 添加对列表的处理,对其他类型也是如此。

对于您的示例输入,它会生成以下内容:

{
'key9': {
 'subkey10': {
  'var1': 'value1',
  '...'
  }
 '...'
 }
'...'
}

关于python - 以紧凑的方式打印大型嵌套字典的结构,而无需打印所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39334638/

相关文章:

python - 在 Python/Django 中设置所有记录器的全局最小日志记录级别

python - Python 中的字典是否提供了制定类似 switch 语句的最佳方式?

dictionary - 在编译时从其他包扩展 map

c - 如何使用 printf 在 C 中打印括号?

打印弹出窗口的 Javascript 在 Firefox/Chrome 中有效,但在 Internet Explorer 中无效

python 3打印生成器

python - 将jpeg文件直接写入lmdb

python - 无法从 pyplot 子图中删除 yticks

Python RX 'from_' 在 'Observable | Observable' 中找不到

std::map 中的 C++ std::unique_ptr