首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python中逐行打印字典?

如何在Python中逐行打印字典?
EN

Stack Overflow用户
提问于 2013-04-03 19:10:57
回答 13查看 751.8K关注 0票数 188

这是字典

代码语言:javascript
复制
cars = {'A':{'speed':70,
        'color':2},
        'B':{'speed':60,
        'color':3}}

使用此for loop

代码语言:javascript
复制
for keys,values in cars.items():
    print(keys)
    print(values)

它输出以下内容:

代码语言:javascript
复制
B
{'color': 3, 'speed': 60}
A
{'color': 2, 'speed': 70}

但我希望程序像这样打印出来:

代码语言:javascript
复制
B
color : 3
speed : 60
A
color : 2
speed : 70

我刚开始学习字典,所以我不知道该怎么做。

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2013-04-03 19:14:06

代码语言:javascript
复制
for x in cars:
    print (x)
    for y in cars[x]:
        print (y,':',cars[x][y])

输出:

代码语言:javascript
复制
A
color : 2
speed : 70
B
color : 3
speed : 60
票数 156
EN

Stack Overflow用户

发布于 2014-01-11 00:10:23

处理任意深度嵌套的字典和列表的更通用的解决方案是:

代码语言:javascript
复制
def dumpclean(obj):
    if isinstance(obj, dict):
        for k, v in obj.items():
            if hasattr(v, '__iter__'):
                print k
                dumpclean(v)
            else:
                print '%s : %s' % (k, v)
    elif isinstance(obj, list):
        for v in obj:
            if hasattr(v, '__iter__'):
                dumpclean(v)
            else:
                print v
    else:
        print obj

这将生成以下输出:

代码语言:javascript
复制
A
color : 2
speed : 70
B
color : 3
speed : 60

我遇到了类似的需求,并开发了一个更健壮的函数作为我自己的练习。我把它包含在这里,以防它对另一个人有价值。在运行nosetest时,我还发现能够在调用中指定输出流,以便可以使用sys.stderr是很有帮助的。

代码语言:javascript
复制
import sys

def dump(obj, nested_level=0, output=sys.stdout):
    spacing = '   '
    if isinstance(obj, dict):
        print >> output, '%s{' % ((nested_level) * spacing)
        for k, v in obj.items():
            if hasattr(v, '__iter__'):
                print >> output, '%s%s:' % ((nested_level + 1) * spacing, k)
                dump(v, nested_level + 1, output)
            else:
                print >> output, '%s%s: %s' % ((nested_level + 1) * spacing, k, v)
        print >> output, '%s}' % (nested_level * spacing)
    elif isinstance(obj, list):
        print >> output, '%s[' % ((nested_level) * spacing)
        for v in obj:
            if hasattr(v, '__iter__'):
                dump(v, nested_level + 1, output)
            else:
                print >> output, '%s%s' % ((nested_level + 1) * spacing, v)
        print >> output, '%s]' % ((nested_level) * spacing)
    else:
        print >> output, '%s%s' % (nested_level * spacing, obj)

使用此函数,OP的输出如下所示:

代码语言:javascript
复制
{
   A:
   {
      color: 2
      speed: 70
   }
   B:
   {
      color: 3
      speed: 60
   }
}

我个人觉得它更有用,更具描述性。

给出一个稍微不那么琐碎的例子:

代码语言:javascript
复制
{"test": [{1:3}], "test2":[(1,2),(3,4)],"test3": {(1,2):['abc', 'def', 'ghi'],(4,5):'def'}}

OP请求的解决方案产生以下结果:

代码语言:javascript
复制
test
1 : 3
test3
(1, 2)
abc
def
ghi
(4, 5) : def
test2
(1, 2)
(3, 4)

而“增强”版本的结果是:

代码语言:javascript
复制
{
   test:
   [
      {
         1: 3
      }
   ]
   test3:
   {
      (1, 2):
      [
         abc
         def
         ghi
      ]
      (4, 5): def
   }
   test2:
   [
      (1, 2)
      (3, 4)
   ]
}

我希望这能为下一个寻找这种功能的人提供一些价值。

票数 86
EN

Stack Overflow用户

发布于 2015-09-13 19:50:34

对于这项工作,pprint.pprint()是一个很好的工具:

代码语言:javascript
复制
>>> import pprint
>>> cars = {'A':{'speed':70,
...         'color':2},
...         'B':{'speed':60,
...         'color':3}}
>>> pprint.pprint(cars, width=1)
{'A': {'color': 2,
       'speed': 70},
 'B': {'color': 3,
       'speed': 60}}
票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15785719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档