列表中 dict 对象的元素顺序

2024-02-15

我从 HOSTS 获得以下列表:

"HOSTNAME": [
            "H1",
            "H2",
            "H3"
        ]

"SW_VERSION": [
            "7.2.2",
            "5.2.2",
            "6.2.2"
        ]

"OSPF_NEIGHBOR": [
            "10.1.1.1",
            "10.1.1.2",
            "10.1.1.3"
        ]

我将它们转换为字典对象列表,如下所示:(目标是根据我们获得的数据创建报告)

- set_fact:
    host_data: "{{ h_data|default([]) + [ { 'HOSTNAME': item.0, 'SW_VERSION': item.1, 'OSPF_NEIGHBOR': item.2} ] }}"
  with_together:
    - "{{ HOSTNAME }}"
    - "{{ SW_VERSION }}" 
    - "{{ OSPF_NEIGHBOR }}"

我得到的输出如下:

"host_data": [
    {
        "HOSTNAME": "H1",
        "OSPF_NEIGHBOR": "10.1.1.1",
        "SW_VERSION": "7.2.2"
    },
    {
        "HOSTNAME": "H2",
        "OSPF_NEIGHBOR": "10.1.1.2",
        "SW_VERSION": "6.2.2"
    },
    {
        "HOSTNAME": "H3",
        "OSPF_NEIGHBOR": "10.1.1.3",
        "SW_VERSION": "5.2.2"
    }
]

I gave HOSTNAME as item.0, SW_VERSION as item.1 and OSPF_NEIGHBOR as item.2, but在输出中OSPF_NEIGHBOR在影响表格式/列顺序的字典元素中排第二。

我们如何确保订单被保留?
或者有没有办法重新排列 dict 元素的顺序host_data按照所需的列顺序列出?


我认为这值得一个答案,因为它并不像什么那么简单@Zeitounator https://stackoverflow.com/users/9401096/zeitounator最初评论:

字典没有顺序。换句话说,您不能依赖从字典中吐出数据的任何顺序。使用与您需要的信息相对应的键名称。

实际上,直到 Python 3.6 之前都是如此,其中进行了更改:

New dict执行

dict 类型现在使用基于 Raymond Hettinger 提案的“紧凑”表示,该提案首先由 PyPy 实现。新的内存使用情况dict()与 Python 3.5 相比,小了 20% 到 25%。

这个新实现的顺序保留方面被认为是实现细节,不应依赖(这将来可能会改变,但希望在更改语言规范之前在几个版本的语言中拥有这个新的 dict 实现)为所有当前和未来的 Python 实现强制要求保留顺序语义;这也有助于保持与旧版本语言的向后兼容性,其中随机迭代顺序仍然有效,例如 Python 3.5)。

Source: https://docs.python.org/3/whatsnew/3.6.html#new-dict-implementation https://docs.python.org/3/whatsnew/3.6.html#new-dict-implementation

在此基础上,Ansible 2.10 版本中最初添加了一项更改:添加对 OrderedDict 的支持 https://github.com/ansible/ansible/issues/17763已被撤消为Python 3.8 的要求 https://github.com/ansible/ansible/pull/74013/commits/3d8f98db52fea62c29e019ea3fdad82c7b954d1a添加了 Ansible。

基于所有这些,我的猜测是您使用的是旧版本的 Ansible(2.10 之前),您的解决方案应该只是升级您的 Ansible 版本,也是因为自 2021 年 12 月 31 日起,2.9 分支已不再支持 https://access.redhat.com/support/policy/updates/ansible-engine.

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

列表中 dict 对象的元素顺序 的相关文章

  • Ansible 检查作为变量提到的安装的磁盘空间

    我是 ansible 的新手 目前正在开发一个游戏 该游戏将查看远程计算机的磁盘空间是否已达到 70 的阈值 如果他们已经达到了 它应该抛出错误 我在以下位置找到了一个很好的例子 使用ansible管理磁盘空间 https stackove
  • Ansible:将命令参数作为列表传递

    我想将多个参数作为列表存储在变量中 vars my args verbose quiet verify 然后将列表作为带引号的参数传递给命令 最明显的是join过滤器没有按我的预期工作 它生成包含所有列表元素的单个单词 而不是每个列表元素一
  • 具有多个 SSH 密钥对的 Ansible

    我是 Ansible 的新手 我能够对其进行测试并且其工作正常 符合我的测试要求 为了在管理节点和客户端节点之间建立连接 我使用已经创建的 ssh 密钥对 如何使用具有不同 SSH 密钥对的另一个节点 作为参考 我正在考虑 3 个具有不同密
  • Ansible add_host 不起作用,它正在跳过主机

    我正在使用 Ansible 创建一个新的 EC2 实例并尝试在其上安装一些软件包 问题是我正在向主机组添加新主机 但我在另一个游戏中看不到该主机组 当到达 配置 EC2 实例 时 它会显示 PLAY 配置EC2实例 跳过 没有匹配的主机 这
  • 如何在 ansible git 模块中使用远程计算机的 SSH 密钥

    我一直在尝试让 Ansible 来配置远程计算机 并且我希望远程计算机能够使用自己的密钥进行设置 并且能够从 Bitbucket 克隆 git 存储库 用户已设置 拥有自己的 id rsa pub 并且密钥已注册到 bitbucket 但是
  • ansible if else 构造

    这是我的 if else Ansible 逻辑 name Check certs exist stat path etc letsencrypt live rootDomain fullchain pem register st inclu
  • Ansible设置mysql root密码

    你们中有人有想法构建一个 yml 用于 mysql 更新 root 密码并授予权限吗 我已经创建了我的剧本 并且在全新安装时它按预期工作 完全没有问题 但是 当我再次进行 vagrant 配置时 它现在无法设置 root 密码 并且出现错误
  • ssl:身份验证方法 ssl 需要密码

    在尝试通过 Ansible 连接到 Windows 虚拟机时 我遇到了以下问题 TASK setup lt 10 xx xx xx gt ESTABLISH WINRM CONNECTION FOR USER winad admin on
  • 从 Ansible 中的自定义模块访问 playbook 变量[重复]

    这个问题在这里已经有答案了 我正在 Ansible 中编写一个特定于 Playbook 的自定义模块 是否可以直接访问剧本变量 而不需要将其作为参数传递给任务 这是不可能的 因为模块是远程执行的 除非显式传递 否则所有变量都不可用 我有同样
  • Ansible:shell 脚本输出始终为空

    我试图将 Linux shell 的输出插入到变量中 但由于某种原因 该变量始终为空 这是 Ansible 代码 name Check PHP version shell php v 2 gt dev null awk print 2 ex
  • 即使在开始时已经输入,Ansible 同步也会提示密码

    Ansible v1 6 5 的同步模块提示输入密码 Enter passphrase for key 尽管我一开始就已经输入了运行剧本 知道为什么吗 我使用以下选项运行我的剧本 u myuser ask sudo pass private
  • Ansible:权限被拒绝(公钥、密码)

    我无法连接到 Ansible 中的主机 这是错误 192 168 1 12 无法到达 gt 改变 假 msg 错误 SSH 在连接过程中遇到未知错误 我们建议您使用 vvvv 重新运行该命令 这会导致 将启用 SSH 调试输出以帮助诊断问题
  • 如何在 playbook 中使用 Ansible Tower 登录凭据?

    是否可以使用我用来直接在剧本中登录 Ansible Tower 的凭据 是的 您可以通过使用 保存您的凭据 来完成此操作安西布尔塔 Ansible Tower 上的凭证类型 从 Ansible Tower UI 中 转至 Credentia
  • Ansible:全局模板文件夹?

    谷歌搜索找不到任何东西 有group vars 全部 对于变量 有类似的模板吗 我想在多个角色中使用一些模板 您可以将全局模板放入templatesAnsible 布局顶层目录 与group vars 顺便说一句 全局文件也是如此 file
  • 如何将文件从 Ansible Tower 上传到 Artifactory?

    我每次都会收到此错误 但仅在尝试从 Ansible Tower 上传到 Artifactory 时出现在特定文件上 这些文件都是在清单主机上创建的Oracle Collection Tool 然后在上传到 Artifactory 之前获取到
  • 从上一个任务获取更改/失败的主机列表 |安西布尔

    All 示例 如果我有 20 个主机用于剧本并使用 Serial 10 运行它们 则以下 shell 命令一次在 10 个主机上运行 完成后 将调用处理程序任务 其中创建 dict dict 的任务不会提供字典输出 因此第二个任务 失败的主
  • 有条件地使用文件夹大小

    我只想在大小大于特定大小时删除文件夹 不幸的是我无法达到想要的结果stat module Attempt hosts pluto tasks stat path home ik thunderbird register folder nam
  • Ansible:即使成为 sudo 用户,也无法配置 sudo 命令

    testuser 是 sudo 用户 sudo cat etc sudoers d 90 cloud init testuser testuser ALL ALL NOPASSWD ALL 我可以手动登录 testuser 并在没有密码的情
  • 如何读取/理解目标主机上的ansible日志(由syslog编写)

    当你在某个主机上执行 ansible 时 它 会写入该主机上的 syslog 如下所示 Dec 1 15 00 22 run tools python ansible
  • Ansible git clone“权限被拒绝”但直接 git clone 工作

    我在使用 Ansible 时遇到了一个令人不安的问题 我使用当前主机的 ssh 密钥在我的环境中设置 git 克隆 name Add user Public Key copy src Users alexgrs ssh id rsa pub

随机推荐

  • 由于“仅允许安全来源”而无法使用 navigator.geolocation

    自从我使用以下命令创建网站以来 控制台中出现错误navigator geolocation getCurrentPosition 以下 我意识到这会在未来的某个时候引起问题 而且由于我只玩网络开发 所以我并没有太担心 但它现在已经完全搞砸了
  • 无法与 WPA2 android 连接

    我正在使用以下代码与 Android 中的 WPA2 连接 我可以与 WEP 和 WPA 连接 但我只获得 扫描 状态 我无法连接 WPA2 网络 你能告诉我需要进行哪些更改才能使此代码与 wpa2 WiFi 相关吗 private boo
  • SQLite3如何使用索引?

    我正在研究 SQLite3 索引 这是一个表 COMPANY CREATE TABLE COMPANY ID INT PRIMARY KEY NOT NULL NAME TEXT NOT NULL AGE INT NOT NULL ADDR
  • 如何在软件中将两个物理串行端口相互桥接(并记录穿过的数据)?

    基本上 我想将我的计算机放在串行线中间并记录通过它的对话 我正在尝试对这段对话进行逆向工程 并最终模拟对话的一端 我正在尝试做的事情的粗略图 通常 我有这个 Device 1 lt gt Device 2 我想做这个 Device 1 lt
  • 如何为 API 客户端提供端点的最新验证规则?

    在我们的 API 中 我们希望实现允许客户端提取验证规则的解决方案 同步验证规则和 您的密码应该是 8 100 个符号 等字段下的任何有用文本将很有用 例如 当客户端请求注册验证规则时 API 使用以下 JSON 进行响应 email ht
  • 未找到具有有效 http:// 前缀的活动(浏览器)

    所以我的应用程序出现了异常 如下所示 android content ActivityNotFoundException No Activity found to handle Intent act android intent actio
  • 在 web.config 中设置要加载的 DLL 的位置

    是否可以在 web config 中设置要加载的特定 DLL 的本地文件路径位置 而不是将这些 DLL 放在 GAC 中或C Windows System32 这将使部署 Web 服务变得更加容易 而不必搞乱其中任何一个 我已经尝试将 DL
  • 有什么方法可以为函数指针比较生成警告吗?

    我花了很长时间才发现我的代码中有一个错误被触发 OPT ICF Because OPT ICF 可以导致相同的地址被分配给不同的函数或只读数据成员 使用 Gy 编译的 const 变量 它可能会破坏依赖于函数或只读数据成员的唯一地址的程序
  • Git 挂钩脚本可以与存储库一起管理吗?

    我们想要制作一些我们都可以共享的基本钩子脚本 用于预格式化提交消息之类的事情 Git 有钩子脚本 通常存储在
  • Xcode 6 链接器错误 - 架构 armv7 的未定义符号

    升级到 Xcode 6 beta 7 现在仍然使用 Xcode 6 GM 后 我无法链接我的 Swift 应用程序 我收到如下错误 架构armv7的未定义符号 swift stdlib compareNSStringDeterministi
  • 回收位图

    我正在从事涉及位图操作的项目 因为我不想出现 OutofMemoryError 所以我尝试回收每个未使用的位图 不幸的是 我回收了太多并且出现了 尝试使用回收的位图 错误 我在用 Bitmap createBitmap bmp x y w
  • 如何检查设备是否已加入 AD 或 Azure AD 加入/注册?

    我需要检查我的设备是否已加入本地域或 Azure AD 加入 注册 如何检查这个 我试过NetGetJoin信息 https learn microsoft com en us windows desktop api lmjoin nf l
  • 如何跨面或网格绘制 geom_line [重复]

    这个问题在这里已经有答案了 我的数据 Plate Month Day Concentration A April 1 17 1094 B April 2 16 001 C April 3 17 9501 D April 4 18 3686
  • 当 NSPasteboard 添加内容时收到通知

    在我的应用程序中 如果 NSPasteboard 中添加了某些内容 我希望收到通知 如果我从任何其他程序复制文本 我希望我的应用程序知道它 我在某处读到 不能那样做 我应该创建一个计时器并自己检查 NSPasteboard 的内容 这是要做
  • 检查Python脚本中的程序是否存在[重复]

    这个问题在这里已经有答案了 如何从 python 脚本检查程序是否存在 假设您想检查是否wget or curl可用 我们假设它们应该在路径中 最好能看到多平台解决方案 但目前 Linux 就足够了 Hints 运行命令并检查返回代码并不总
  • client.user.setActivity 发现为 null? (节点.js)

    我正在尝试将我的 Discord 机器人的活动设置为 游戏 但是我在网上找到的示例根本没有帮助 client user setActivity what the bot is playing 根本不起作用 它给了我这个错误 说明我正在尝试找
  • 挂起互操作 COM 对象的问题

    我有一个应用程序 它使用 COM 互操作来创建一个电子表格 该电子表格在客户端计算机上的 Excel 中打开 但是 如果我查看任务管理器 当用户关闭 Excel 时 EXCEL exe 进程并不总是结束 如果我保存工作簿并以编程方式关闭 E
  • 使用 Netty 的异步 HTTP 客户端

    我是 Netty 新手 仍在努力寻找自己的方法 我正在寻找创建一个异步工作的 http 客户端 http的netty例子只展示了如何等待IO操作 并没有展示如何使用添加监听器 所以最近几天我一直在努力解决这个问题 我正在尝试创建一个请求类
  • jQgrid 工具栏搜索 - 从任何列动态删除搜索框

    我正在使用 jqgrid 版本 4 4 4 现在我面临一个与工具栏搜索相关的问题 正如我在标题中提到的 我想从任何列中删除工具栏搜索的搜索框 动态地 在渲染网格期间或之后 我用谷歌搜索 但没有找到关于我的这个问题的任何相关解决方案 我用了s
  • 列表中 dict 对象的元素顺序

    我从 HOSTS 获得以下列表 HOSTNAME H1 H2 H3 SW VERSION 7 2 2 5 2 2 6 2 2 OSPF NEIGHBOR 10 1 1 1 10 1 1 2 10 1 1 3 我将它们转换为字典对象列表 如下