我有一个列表,其中包含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开始,可以使用我的方法)似乎是去这里的最佳方式。
答案 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!"