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

2023-11-29

当我运行它时,我需要按照这个确切的顺序打印这段代码(访客团队、访客评分、主队、主评分、预期获胜者、利润)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 中的字典现在已经排序,所以这实际上按照我的预期打印出来。我猜想 Python 3.6 给了我正是我所需要的东西,这只是运气不好!

但我在另一台计算机上安装了 Python 3.5,但打印结果并不像我想要的那样。我一直在阅读有关 orderdicts 的内容,但我不确定如何准确使用它。我是否需要先将 Final_dict 声明为空,然后迭代到我需要的键顺序?


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),
                        ])

An OrderedDict像平常一样工作dict在大多数方面,除了具有不同的repr以及一些额外的方法。您可以阅读更多相关信息the 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我的系统上的库。但它至少应该接近工作。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 3.6 与旧版本中的字典顺序 的相关文章

随机推荐

  • 使用以正则表达式作为键的字典进行多个正则表达式替换

    我想使用多个正则表达式对字符串进行多次替换 我还想在一次传递中进行替换 以避免创建字符串的多个实例 假设对于参数 我想进行下面的替换 同时避免多次使用 re sub 无论是显式使用还是循环使用 import re text local fo
  • 带有 jquery.ajax() 的跨域“授权”标头

    我正在尝试发送跨源域并添加自定义 授权 标头 请参阅下面的代码 Error XMLHttpRequest 无法加载 url Access Control Allow Headers 不允许请求标头字段授权 function loadJson
  • 类路径和源路径之间的区别?

    我对类路径和源路径有这种困惑 我参考了这些链接 也是 但我没做对 参考 javac 的类路径和源路径选项之间的差异 sourcepath 与 classpath 关于自动重新编译 我无法发现 javac 的 classpath 和 sour
  • Firefox 扩展开发 - 数据存储 - Firefox 首选项是个好地方吗?

    我开发了一个 Firefox 插件 需要在本地计算机中保存一些用户数据 现在 我使用 Firefox 提供的文件系统功能在用户系统中创建一些文件夹和文件 可移植性是一个问题 我是为 Windows XP 设计的 但是 Vista 的文件夹结
  • 在准备好的 mysqli 语句中多次使用一个参数

    是否可以在准备好的参数中使用一个参数mysqli 多次声明仅绑定一次 像这样的东西 stmt mysqli gt prepare SELECT FROM user WHERE age BETWEEN 1 2 AND 1 2 stmt gt
  • 仅将字典的最新值添加到列表中[重复]

    这个问题在这里已经有答案了 通过 for 循环创建字典列表 我一直在尝试通过 for 循环创建字典列表 代码如下所示 a x y z b 1 2 3 dict1 superlist for i in range 0 len a dict1
  • javaassist 和 cglib 之间的区别

    我学习hibernate 我了解到hibernate已经停止使用cglib并切换到javaassist 我还了解到javaassist和cglib用于代理生成 所以我想知道这两者是如何工作的以及哪一个更好 他们的工作方式有什么区别 Cgli
  • 将 R 变量传递给 sql 语句

    有没有办法将 R 中定义的变量传递给 sqldf 包中的 SQL 语句 我必须运行下面的代码 并将 v 变量作为 v 传递给 sql select 语句 for i in 1 50 v lt i 450 temp lt sqldf sele
  • sys_brk 的对齐要求是什么

    我正在使用 sys brk 系统调用动态分配堆中的内存 我注意到 在获取当前中断位置时 我通常会得到与此类似的值 mov rax 0x0C mov rdi 0x00 syscall 结果是 rax 0x401000 该值通常按 512 字节
  • javascript 找不到图像文件(Rails 4 应用程序)

    我有一个 Ruby on Rails 4 应用程序 在app assets javascripts 我创建了一个文件map js在谷歌地图上绘制一些自定义标记 var marker new google maps Marker dragga
  • 对于不相等的列表,eq 返回 true

    我有一段奇怪的代码需要调试 我认为它应该抛出异常 但它却产生了完全奇怪的结果 将其简化为这两行 EDU gt gt A 0 0 A 0 0 EDU gt gt A 1 2 A 2 1 ans 1 为什么两个不相等的逗号分隔列表的比较是正确的
  • Python - 如何跳过特定的 JSON 元素?

    query pages 7412236 pageid 7412236 ns 0 title Steve Jobs extract p b Steven Paul b b Steve b b Jobs b u02c8d u0292 u0252
  • jQuery 中的 onHide() 类型事件

    有谁知道一个onHide jQuery 中的事件或类似的东西 I tried this bind hide function console log asdasda 但显然这不起作用 Edit 只是为了澄清 它是使用 CSS 隐藏的disp
  • 在同一脚本中启动并调用 Ruby HTTP 服务器

    我想知道如何启动 Ruby Rack 应用程序 例如 Sinatra 并在同一脚本中使用 Net HTTP 或类似方法调用它 当然我可以做类似的事情 require sinatra base require net http t Threa
  • 将 json 反序列化为 pojo,其中 json 字段具有不同的数据类型

    我正在尝试将 json 反序列化为 java pojo 但我无法理解应该如何开始创建一个可用于反序列化 json 的 java 对象 如下所示 links version 2 executionState completed outputs
  • Selenium WebDriver - Java - 单击按钮

    我正在尝试单击一些按钮 并使用 twitch 上的 关注 按钮作为示例 我使用 Selenium IDE 尝试获取按钮的 xpath 我得到的 xpath 是 span id ember637 a span 如果我转到 FireFox 并复
  • 具有缺失值的多元 LSTM

    我正在使用 LSTM 解决时间序列预测问题 输入包含多个特征 因此我使用多元 LSTM 问题是有一些缺失值 例如 Feature 1 Feature 2 Feature n 1 2 4 nan 2 5 8 10 3 8 8 5 4 nan
  • EACCES:权限被拒绝,打开 '/usr/local/lib/node_modules/npm/bin/npm-cli.js'

    你好 先生 我是 docker 新手 我正在使用 ubuntu budgie linux 20 04 我的 docker 版本是Docker version 18 09 9 build 1752eb3我已经使用 snap 包管理器安装了 d
  • 更改基本 MVVM 的当前实现以遵循 SOLID 模式

    我一直在使用在线提供的 MVVM 示例中通常提到的基本设计模式编写所有 MVVM 应用程序 我遵循的模式如下所述 Model 本节包括 DTO 类及其属性和接口 IDataService 等 public class Employee pu
  • python 3.6 与旧版本中的字典顺序

    当我运行它时 我需要按照这个确切的顺序打印这段代码 访客团队 访客评分 主队 主评分 预期获胜者 利润 tabulate final dict Visitor Team visitor team Visitor Rating visitor