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
和一些额外的方法。您可以在docs中阅读有关它的更多信息。
在Python 3.6及更高版本中,如果您的键字符串是有效的标识符(例如OrderedDict(Margin=expected_winner_diff)
),您还可以在构造函数中使用关键字参数。与正常dict
s的顺序不同,可以保证关键字的顺序得以保留(而不是实现细节)。但是,这不是向后兼容的(无论如何也不能用于您的非标识符键)。
但是可能值得考虑的是,如果您需要非常特定的数据顺序,则字典可能不是最佳的存储类型。我看到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
我的系统上没有该库,因此我并未实际测试过该代码。但是它至少应该可以正常工作了。)