您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python 3.6中的字典顺序与旧版本

python 3.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和一些额外的方法。您可以在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我的系统上没有该库,因此我并未实际测试过该代码。但是它至少应该可以正常工作了。)

python 2022/1/1 18:26:44 有193人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶