【问题标题】:For loop padding print statements of dictionary by longest key对于按最长键的字典的循环填充打印语句
【发布时间】:2020-09-22 20:46:37
【问题描述】:

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

下面的代码可以满足我的要求,但是 17 是我的单元测试中硬编码的,我想用变量 long_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)

我试着做这里写的:https://stackoverflow.com/a/54605046/2415706

喜欢:

print("{0:&lt;{longest_key}}".format(k), v)

并且还使用了全局关键字,但我不断收到关于最长键的键错误。谢谢!

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

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

我的任务的下一部分随机奖励,如果您必须在值上运行函数,您可以在 {} 中执行此操作,例如:

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

【问题讨论】:

  • 这是我参与的一个程序中的一行。 print('{0}{1:&gt;{2}}'.format(char, dictionary.get(char, 0), length)) 并且可以对其进行返工以做你想做的事。填充在{2} 中指定(等于length

标签: python for-loop string-formatting f-string


【解决方案1】:

在最新版本的 python (3.6) 中引入了新样式的字符串格式,您似乎将这种样式 (f-strings) 与旧样式 (str.format) 混合在一起。

f-strings 风格的解决方案就是你所链接的。

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

【讨论】:

  • 哦,是的,你是对的。我没有意识到我没有做 f-string 因为我错过了 f,也没有意识到混合风格。我想做f弦。我让它工作了。 print(f"{k:&lt;{longest_key}} {v}") 谢谢。
【解决方案2】:

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

在下方添加多个选项以提供更清晰的信息。在大多数选择中,我冒昧地假设您使用的是longest_key来填充,因为我没有看到在代码sn-p中计算它的另一个原因

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))

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

【讨论】:

    猜你喜欢
    • 2017-04-24
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多