当我通过tabulate
运行时,我需要按照这个确切的顺序(访客团队,访客评分,主页团队,家庭评级,预期获胜者,保证金)打印出这些代码。
final_dict = {'Visitor Team': visitor_team, 'Visitor Rating': visitor_rating, 'Home Team': home_team,
'Home Rating': home_rating, 'Expected Winner': expected_winner, 'Margin': expected_winner_diff}
print(tabulate(final_dict, headers="keys", floatfmt=".2f", tablefmt="fancy_grid"))
我一直在学习和使用Python 3.6,而且我不知道,3.6中的dicts现在已经订购了,所以这实际上按照我的意图打印出来。这只是运气不好我猜Python 3.6给了我正确的东西!
但是我在另一台计算机上安装了Python 3.5,这并没有像我想的那样打印出来。我一直在阅读有关订单,但我不确定如何使用它。我是否需要首先将final_dict声明为空,然后迭代到我需要的关键顺序?
答案 0 :(得分:6)
Python 3.6中的字典是有序的,但该功能被认为是您不应该依赖的实现细节(除了**kwargs
之类的一些特定情况)。如果您确实需要特定订单,则应使用collections.OrderedDict
代替。您可以使用所需顺序的key, value
元组列表构建一个:
from collections import OrderedDict
finaldict = OrderedDict([('Visitor Team', visitor_team),
('Visitor Rating', visitor_rating),
('Home Team', home_team),
('Home Rating', home_rating),
('Expected Winner', expected_winner),
('Margin', expected_winner_diff),
])
OrderedDict
在大多数方面与普通dict
一样,除了使用不同的repr
和一些其他方法。您可以在the docs中了解有关它的更多信息。
在Python 3.6+中,如果您的密钥字符串是有效的标识符(例如OrderedDict(Margin=expected_winner_diff)
),您还可以使用构造函数的关键字参数。与普通dict
的排序不同,保证关键字的顺序(不是实现细节)。但这并不是向后兼容的(无论如何都不能用于你的非标识符键)。
但值得考虑的是,如果您需要一个非常具体的数据订单,字典可能不是用于存储它的最佳类型。我看到您使用的tabulate
函数来自一个库,根据文档,它接受许多不同格式的数据。我可能只是传递一个列数据列表,并分别给它标题:
data = [visitor_team, visitor_rating, home_team,
home_rating, expected_winner, expected_winner_diff]
headers = ["Visitor Team", "Visitor Rating", "Home Team",
"Home Rating", "Expected Winner", "Margin"]
print(tabulate(data, headers=headers, floatfmt=".2f", tablefmt="fancy_grid"))
(注意,我实际上没有测试过那段代码,因为我的系统上没有tabulate
库。但它应该至少接近工作。)