2012-01-16 62 views
1

我有一個列表,其中有項目是dict或其他東西。python:打印一個列表和特殊套管字典

我想寫一個方法,打印列表,每個項目的行,但特殊情況下的字典;是這樣的:

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

我可以實現的一切,但itemIsDict - 什麼是做到這一點的最簡單的方法?


只是澄清:

該列表的源產生使用字典文本例如項目{'a': 3, 'b': 4},這使得使用知道如何格式化自己的特殊字典類型變得很麻煩。另外,我的printSpecialList方法稍微複雜一點,它有它自己的私有狀態,所以它包含了,所以實例測試儘管是「很糟糕」(例如,某人不能製作一個不會從字典中下降的模擬字典類,將與我的方法一起工作)似乎是最好的方式去這裏。

回答

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

通過使用type()

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

中找到除了在此不能識別「dict」的子類型,即使是這樣的對象,對於(幾乎)所有意圖和目的而言,也是完全有效的字典。 – delnan 2012-01-16 19:06:47

+0

啊,這就是類型和isinstance之間的區別?謝謝,我不知道。 – Michael0x2a 2012-01-16 19:08:19

2

isinstance(item, dict)會做你問什麼,但它必須說,分支對一個變量的類型是相當聯合國Python化。

+0

我意識到這一點,但我沒有看到任何真正的選擇:一個'dict'對象不知道如何以我想要的方式進行格式化,而我卻這樣做。 – 2012-01-16 19:15:31

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

+0

我明白,但我有現成的代碼,使這個列表,我不希望它必須使用MyDict而不是像'{'a':3,'b':4}這樣的文字' – 2012-01-16 19:27:30