2014-01-12 24 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)