2013-05-20 214 views
1

我試圖掃描字典引用列表以獲取每個字典中的鍵數。如何引用元素的名稱而不是字典的內容? audit_dicts列表中的每個元素都是對現有字典的引用。通過名稱引用列表元素

audit_dicts = [ osdata, weblogic, tomcat ] 
for i in audit_dicts: 
    print "Length of the %s dictionary is %d lines." % (i.name(), len(i)) 

據我所知,它做的內容類型是一本字典,但有沒有辦法打印列表中的元素的名稱?我基本上使用列表來存儲所有這些字典,以便我可以在一個循環中對它們執行多個操作。另外,有沒有辦法在同一個循環中聲明這些字典?這樣做的pythonic方式是什麼?我目前有20個不同的數據記錄,但是我只能在從Web數據構建字典之前單獨對每個數據進行刪除保護。

for i in audit_dicts: 
    i = {} 
+0

如何使用'dict'一個名字和實際的字典參考? – pcalcao

+0

爲了澄清,你想獲得作爲字符串的變量名稱'osdata','weblogic'和'tomcat'? – delnan

+0

@delnan - 正確!我基本上試圖打印列表元素的名稱....這恰好是一個字典的指針。這聽起來好像沒有別的辦法可以製作另一本引用這些字典的字典了嗎? – sigsegv

回答

6

列表不包含名稱,它們包含對其他對象的引用。如果您希望能夠使用多於一個索引來引用元素,那麼您應該使用另一個數據結構,如dict

+1

或者可能是'namedtuple'。 – mgilson

0

您可以使用__name__屬性,如果它被設置爲這個對象:

audit_dicts = [ osdata, weblogic, tomcat ] 
for i in audit_dicts: 
    name = "unknown"; 
    try: 
    if __name__ in i: 
     name = i.__name__; 
    except: 
    pass 
    print "Length of the %s dictionary is %d lines." % (name, len(i)) 

但你最好使用字典而不是列表:

audit_dicts = { 
    "osdata":osdata, 
    "weblogic":weblogic, 
    "tomcat":tomcat 
    } 
for key in audit_dicts: 
    print "Length of the %s dictionary is %d lines." % (key, len(audit_dicts[key])) 
+0

這給出了對象類型的(非限定)名稱,或者如果它是一個函數,則在其定義處設置名稱。這幾乎總是錯誤的,在任何情況下都不一定是'audit_dicts'中使用的變量名稱。檢查存在是多方面的錯誤。 – delnan

+0

我沒有看到任何其他解決方案。 – Heavy

+0

然後我認爲它不可能,因爲這個答案中的代碼不起作用。 – delnan

相關問題