【问题标题】:Iterate over a dictionary and print results in a column with headers遍历字典并在带有标题的列中打印结果
【发布时间】:2014-01-31 01:41:25
【问题描述】:

我是 python 新手,正在学习一些教程和 Violent Python。

我正在尝试改进书中的 PW 破解示例。

我将破解的密码存储在以用户名作为密钥的字典中

结果 = {'user1 : pass1', user2 : 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

【问题讨论】:

    标签: python-2.7 dictionary format iteration


    【解决方案1】:
    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'} 将用户作为键,将密码作为值,但没有用户编号。为了生成上面的用户编号,我使用 enumerate 对排序的键进行计数。

    字典具有未定义顺序的条目。因此,为了制作一个漂亮的表格,我对键进行了排序,以便它们按顺序显示。

    【讨论】:

    • 这里不使用 iteritems 有点不像 imo。
    • @SteinarLima 任何使用 iteritems 的代码在 Python3 下运行时都会中断,其中 iteritems 已被删除。
    • 是的,这是 Python 2.7。如果您考虑升级,请使用items
    【解决方案2】:

    您当前正在尝试将每个键的值解压缩为两个值,因此出现错误。 .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)
    

    【讨论】:

      猜你喜欢
      • 2018-11-21
      • 2016-10-10
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多