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

python:打印列表,&;特殊套管,python,polymorphism,Python,Polymorphism,我有一个列表,其中包含dicts或其他项目 我想写一个方法来打印列表,每一项都在一行上,但特殊情况下会打印目录;比如: def printSpecialList(mylist): for item in mylist: if itemIsDict(item): printDictItem(item) else: print str(item) 我可以实现所有功能,但itemIsDict——最简单的方法是什么 只是澄清一下: 此列表的源使用字典文本生

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

我想写一个方法来打印列表,每一项都在一行上,但特殊情况下会打印目录;比如:

def printSpecialList(mylist):
  for item in mylist:
    if itemIsDict(item):
      printDictItem(item)
    else:
      print str(item)
我可以实现所有功能,但
itemIsDict
——最简单的方法是什么


只是澄清一下:

此列表的源使用字典文本生成项,例如
{'a':3,'b':4}
,这使得使用知道如何格式化自己的特殊字典类型很麻烦。此外,我的
printSpecialList
方法有点复杂,并且它有自己的私有状态,因此实例测试,尽管“令人讨厌”(例如,有人无法创建一个模拟的dict类,该类不是dict的后代,可以与我的方法一起工作),似乎是最好的方法。

使用
type()

通过使用
type()


isinstance(item,dict)
可以满足您的要求,但必须指出的是,变量类型上的分支是非Pythonic的。

isinstance(item,dict)
可以满足您的要求,但必须指出的是,在变量类型上进行分支是相当非Pythonic的。

您可以对
dict
进行子类化,并实现
\uuu repr\uu
\uu str\uu
方法:

class MyDict(dict):

    __str__(self):
        # you write your custom string format
        return 'my custom formatted string'
这样,您的代码将以相同的方式处理每个项目:

for item in mylist:
    print item

注意:如果您想采用这种方法,可以在中找到更多信息,您可以对
dict
进行子类化,并实现
\u repr\u
\u str\u
方法:

class MyDict(dict):

    __str__(self):
        # you write your custom string format
        return 'my custom formatted string'
这样,您的代码将以相同的方式处理每个项目:

for item in mylist:
    print item

注意:如果您想采用这种方法,可以在

中找到更多信息,除了它不能识别
dict
的子类型之外,就(几乎)所有意图和目的而言,即使这样的对象也是完全有效的字典。啊,这就是类型和isinstance之间的区别?谢谢,我不知道。除了它不能识别dict的子类型之外,就(几乎)所有的意图和目的而言,甚至这样的对象都是完全有效的字典。啊,这就是type和isinstance之间的区别?谢谢,我不知道。我知道这一点,但我没有看到任何真正的选择:一个
dict
对象不知道如何按我想要的方式格式化自己,而我知道。我知道,但我没有看到任何真正的选择:一个
dict
对象不知道如何按我想要的方式格式化自己,而我知道。我明白,但是我有现成的代码来制作这个列表,我不希望它必须使用MyDict而不是像
{'a':3,'b':4}
这样的文字,我理解这一点,但是我有现成的代码来制作这个列表,我不希望它必须使用MyDict而不是像
{'a':3,'b':4}