2014-01-12 44 views
1

我是python的新手,並通過一些教程和暴力Python工作。迭代字典並在帶有標題的列中打印結果

我正在努力改進本書中有關PW裂解裝置的示例。

我都存儲在一個字典與用戶名作爲關鍵

結果=破解密碼{「USER1:PASS1」,用戶2:PASS2}等等......

我想遍歷字典和打印結果以下列方式:

key  User   Password 
    1   user1   pass1 
    2   user2   pass2 

下面是我一直在試圖用它來得到這個隨着我不斷收到錯誤的工作代碼。

print "{:<8} {:<15} {:<15}" .format("Key", "User", "Password") 
    for k,v in results.iteritems(): 
     user, pw = v 
     print "{:<8} {:<15} {:<15}".format(v, user, pw) 

錯誤:

Traceback (most recent call last): 
    File "shadow_crack.py", line 75, in <module> 
     main() 
    File "shadow_crack.py", line 68, in main 
    user, pw = v 
    ValueError: too many values to unpack 

回答

0
results=dict(user1='pass1', user2='pass2') 

print("{:<8} {:<15} {:<15}".format("Key", "User", "Password")) 
for i, k in enumerate(sorted(results)): 
    print("{:<8} {:<15} {:<15}".format(i+1, k, results[k])) 

以上結果:

Key  User   Password 
1  user1   pass1 
2  user2   pass2 

你得到的錯誤是因爲你的字典results = {'user1 : 'pass1', 'user2' : 'pass2'}了用戶的密鑰和密碼的值,但沒有用戶號碼。爲了生成上面的用戶號碼,我使用枚舉來對已排序的鍵進行計數。

詞典以未定義的順序包含條目。所以,爲了製作一張漂亮的桌子,我對這些按鍵進行了排序,以便它們按順序顯示。

+0

不使用iteritems這裏有點兒unpythonic imo。 –

+0

謝謝,這工作完美。 –

+0

@SteinarLima任何使用iteritems的代碼都會在Python3下運行,其中的iteritems已被刪除。 – John1024

0

您目前正試圖將每個鍵的值解壓到兩個值中,因此出現錯誤。 .iteritems的作用是返回字典的鍵和值。你試圖實現的輸出是你的價值觀念。這段代碼應該可以幫助你。

print "{:<8} {:<15} {:<15}" .format("Key", "User", "Password") 
    for i, (user, pwd) in enumerate(results.iteritems()): 
     print "{:<8} {:<15} {:<15}".format(i, user, pwd)