Python
3.6中的字典是有序的,但是该功能被视为您不应该依赖的实现细节(在某些特殊情况下,如除外
**kwargs)。如果确实需要特定的订单,则应
collections.OrderedDict改用。您可以使用
key,value所需顺序的元组列表构造一个:
from collections import OrderedDictfinaldict = 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)),您还可以在构造函数中使用关键字参数。与正常
dicts的顺序不同,可以保证关键字的顺序得以保留(而不是实现细节)。但是,这不是向后兼容的(无论如何也不能用于您的非标识符键)。
但是可能值得考虑的是,如果您需要非常特定的数据顺序,则字典可能不是最佳的存储类型。我看到
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我的系统上没有该库,因此我并未实际测试过该代码。但是它至少应该可以正常工作了。)



