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

时间:2016-09-05 16:34:17

标签: 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,但我找不到嵌套字典的任何内容。

1 个答案:

答案 0 :(得分:2)

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

但这里的基本功能如何运作:

LOAD DATA INFILE 'F://blood.csv' 
INTO TABLE blood_bank
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS

这个嵌套函数只是向下搜索它找到的任何dicts并继续忽略它抓取的第一个项目。您可以为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)