python:打印列表,&特殊套管

时间:2012-01-16 19:01:39

标签: python polymorphism

我有一个列表,其中包含dict s或其他内容的项目。

我想写一个方法来打印列表,每个项目都在一行,但特殊情况下的dicts;类似的东西:

def printSpecialList(mylist):
  for item in mylist:
    if itemIsDict(item):
      printDictItem(item)
    else:
      print str(item)

我可以实现除itemIsDict以外的所有内容 - 最简单的方法是什么?


只是一个澄清:

此列表的来源使用字典文字生成项目,例如{'a': 3, 'b': 4},这使得使用知道如何格式化自己的特殊字典类型变得很麻烦。另外,我的printSpecialList方法有点复杂,并且它有自己的私有状态,所以实例测试,虽然“令人讨厌”(例如有人不能创建一个没有的模拟字典类从dict开始,可以使用我的方法)似乎是去这里的最佳方式。

4 个答案:

答案 0 :(得分:6)

def itemIsDict(item):
    return isinstance(item, dict)

答案 1 :(得分:2)

isinstance(item, dict)会做你所要求的,但必须要说的是,对变量类型的分支是非Pythonic。

答案 2 :(得分:2)

您可以继承dict并实施__repr____str__方法:

class MyDict(dict):

    __str__(self):
        # you write your custom string format
        return 'my custom formatted string'

这样您的代码将以相同的方式处理每个项目:

for item in mylist:
    print item

注意:如果您想要遵循此方法,可以在official documentation

中找到更多信息

答案 3 :(得分:0)

使用type()

if type(item) == dict:
    print "Dictionary!"