For loop padding print statements of dictionary 按最长键

For loop padding print statements of dictionary by longest key

所以我有这个名称和值的字典,我正在尝试打印它们之间的空格,并用最长键的长度填充。

下面的代码可以满足我的要求,但是 17 是我的单元测试硬编码的,我想用变量 longest_key.

替换它
longest_key = max(len(x) for x in sorted_dict)
# longest_key is 17 for unit test
for k, v in sorted_dict:
    print("{0:<17}".format(k), v)

我试着按照这里写的做:

喜欢:

print("{0:<{longest_key}}".format(k), v)

并且还使用了 global 关键字,但我一直在 longest_key 上遇到关键错误。谢谢!

更新:对于阅读本文的任何人,此印刷品混合了 f 字符串(虽然缺少 f ......)和 .format。 f-string 是最新的东西,也是最清晰的,所以随它去吧。它应该看起来像:

print(f"{k:<17} {v}")

我作业的下一部分随机奖励,如果您必须 运行 对值起作用,您可以在 {} 内执行此操作,例如:

print(f"{some_function(k):<17} {some_other_function(v)}")

最新版本的 python (3.6) 中引入了新样式的字符串格式,您似乎将该样式 (f-strings) 与旧样式 (str.format).

f-strings 风格的解决方案就是您链接到的解决方案。

如果您有旧版本的 python 并想使用 str.format,我刚刚试验并找到了这个解决方案:'{0:{1}}'.format(k, longest_key)0 指的是第一个参数 (k),1 指的是第二个参数,longest_key.

您似乎在混合样式 + 对 dict 中循环键值的另一个小修正

在下方添加多项选择以提供更多清晰度。在大多数选择中,我冒昧地假设您正在使用 longest_key 来填充,因为我没有看到在代码片段

中计算它的另一个原因
sorted_dict = {"name": "Hello", "numbers1234567890": "seventeen"}

longest_key = max(len(x) for x in sorted_dict)
# longest_key is 17 for unit test

for k, v in sorted_dict.items():
    print(f"{k:<17}", v)
for k, v in sorted_dict.items():
    print(f"{k:<{longest_key}}", v)
for k, v in sorted_dict.items():
    print(f"{k:<{longest_key}} {v}")

# for python <3.6
for k, v in sorted_dict.items():
    print("{0:<17}".format(k), v)
for k, v in sorted_dict.items():
    print("{0:<{1}}".format(k, longest_key), v)
for k, v in sorted_dict.items():
    print("{0:<{1}} {2}".format(k, longest_key, v))
for k, v in sorted_dict.items():
    print("{0:<{width}} {1}".format(k, v, width=longest_key))

我知道还有其他方法可以做到这一点,但我只列出了这些方法,因为我希望它们能使代码样式的语法更加清晰。