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))
我知道还有其他方法可以做到这一点,但我只列出了这些方法,因为我希望它们能使代码样式的语法更加清晰。
所以我有这个名称和值的字典,我正在尝试打印它们之间的空格,并用最长键的长度填充。
下面的代码可以满足我的要求,但是 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))
我知道还有其他方法可以做到这一点,但我只列出了这些方法,因为我希望它们能使代码样式的语法更加清晰。