2011-11-01 203 views
2

我想從字典中檢索一些值,應該相當容易。Python:打印變量字典字典

無論出於何種原因,我無法使用變量來檢索值。

我有兩個字典,一個具有的UID的映射 - >用戶名(經由getent passwd中),以及其中包含的字典用於每個密鑰的第二詞典,基本上是:

dMap = { 12345678: 'username' } 
qDict['12345678'] = {'used': '4204224', 'grace': 'none', 'quota': '5242880'} 

顯然還有很多這兩個字典的價值,但我所展示的結構是基本的概念。

他們的qDict關鍵將是一個UID(應該通過深度貼圖字典映射)

如果我有麻煩的是以下幾點:

for k,v in dMap.items(): 
    print 'Key: ',k 
    print qDict[k] 

當我運行該腳本,我得到:

Traceback (most recent call last): 
    File "./test.py", line 156, in ? 
    main() 
    File "./test.py", line 98, in main 
    print qDict[k] 
KeyError: 26617862 

如果我註釋掉:打印qDict [K]線之上,並且只打印k的值,鍵名印刷沒有問題。我也可以參考字典外for循環與實際的鍵名(12345678):

print dMap[26617862]   # this works! 
print qDict['26617862']  # this works!  #NOTE BELOW 

我想要做的就是有for循環打印字典對於給定的鍵名,類打印字典的字典...我想問題是(如果你看看#NOTE BELOW行)我需要以某種方式呈現正確的格式化變量字典(qDict)。

有沒有我在這裏失蹤的東西,還是有更簡單的方法來做到這一點?

PS:我也試過用dMap.keys()循環等

回答

0

dMap的關鍵是整數,但在qDict鍵是字符串。

您需要qDict使用它作爲一個鑰匙之前,你的整數k轉換爲字符串:

for k in dMap: 
    print 'Key: ',k 
    print qDict[str(k)] 
+0

是的,這就是它! 我最近來自Perl,我不記得這些相同類型的問題,但我可能是錯的... 感謝您的幫助。 – billnted

1

您建立使用不同類型的鑰匙兩個庫。一個詞典有一個整數鍵,另一個有一個字符串鍵。

正如@Mark Byers所說,你可以將整數轉換爲一個字符串來進行查找。

但是,我建議您改爲使用整數鍵構建qDict。無論您的代碼是在哪裏構建qDict,將該密鑰包裝在int()中以強制它成爲整數密鑰。

無論哪種方式將工作,真的。但是,如果dMapint密鑰而qDictstr密鑰,則qDict中有一些密鑰可能不會出現在dMap中,如果兩者匹配,則最好是它們具有相同類型的密鑰。而且int應該稍微高效一些,所以如果你的程序比較大,這是更好的選擇。

+0

謝謝史蒂夫,我將把這兩個鍵轉換爲一個通用格式。在這種情況下,我將使用字符串,因爲我需要修剪我用來填充字典的輸入文件中的一些垃圾。 – billnted