【问题标题】:printing values and keys from a dictionary in a specific format (python)以特定格式打印字典中的值和键(python)
【发布时间】:2014-12-10 08:26:04
【问题描述】:

我有这本词典(姓名和年级):

d1 = {'a': 1, 'b': 2, 'c': 3}

我必须这样打印:

|a          | 1          |       C |
|b          | 2          |       B |
|c          | 3          |       A |

我创建了一个新字典来根据这些条件找出字母分级:

d2 = {}
d2 = d1
for (key, i) in d2.items():
    if i = 1:
        d2[key] = 'A'
    elif i = 2:
        d2[key] = 'B'
    elif i = 3:
        d2[key] = 'C'

尝试使用以下代码打印时:

sorted_d = sorted(d)

format_str = '{:10s} | {:10f} | {:>7.2s} |'
for name in sorted_d:
    print(format_str.format(name, d[name]))

打印出来:

a         | 1         |
b         | 2         |
c         | 3         |

如何添加字母等级?

【问题讨论】:

  • 您的成绩代码并没有完全改变正确的字典。它引用d1(不是复制它)。然后你改变dw。您还反转了成绩;您的示例输出声明 1 应该是 C 但实际上您将 A 用于 1。
  • 您声明的输出也与您的实际代码不匹配。
  • 您也在对字典d 进行排序,但您的输入字典 被称为d1。您能否至少在您的问题中生成能够正确重现您的问题的代码?
  • 您的输出示例代码也会引发异常 (IndexError: tuple index out of range),因为您没有为 3 个格式槽提供 3 个参数。而{:10f} 会为d[name] 值生成1.000000、2.000000 和3.000000。

标签: python python-3.x dictionary


【解决方案1】:

您的成绩字典可以这样创建:

grades = {1: 'C', 2: 'B', 3: 'A'}  # going by the sample output

{:>7.2f} 需要一个浮点数。只需使用s 或离开类型格式化程序,不要指定精度。你的字典值是整数,所以我会使用d 格式,而不是f。您的示例输出也显示为左对齐这些数字,而不是右对齐,因此格式说明符需要'<10d'。

要包含成绩字母,请以d[name] 为关键字查找成绩:

format_str = '{:10s} | {:<10d} | {:>10s} |'
for name in sorted_d:
    print(format_str.format(name, d[name], grades[d[name]]))

演示:

>>> d1 = {'a': 1, 'b': 2, 'c': 3}
>>> grades = {1: 'C', 2: 'B', 3: 'A'}  # going by the sample output
>>> sorted_d = sorted(d1)
>>> format_str = '{:10s} | {:<10d} | {:>10s} |'
>>> for name in sorted_d:
...     print(format_str.format(name, d1[name], grades[d1[name]]))
... 
a          | 1          |          C |
b          | 2          |          B |
c          | 3          |          A |

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多