多键字典,其中键顺序无关紧要

2023-12-30

我正在尝试创建一个以两个字符串作为键的字典,并且我希望键按任何顺序排列。

myDict[('A', 'B')] = 'something'
myDict[('B', 'A')] = 'something else'
print(myDict[('A', 'B')])

我希望这段代码可以打印“其他内容”。不幸的是,元组的顺序似乎很重要。用作密钥的最佳数据结构是什么?


Use a frozenset https://docs.python.org/3/library/stdtypes.html#frozenset

代替tuple,这是有序的,您可以使用frozenset,即无序的, 同时还hashable as frozenset is 不可变的.

myDict = {}
myDict[frozenset(('A', 'B'))] = 'something'
myDict[frozenset(('B', 'A'))] = 'something else'
print(myDict[frozenset(('A', 'B'))])

将打印:

something else


不幸的是,这种简单性有一个缺点,因为frozenset基本上是一个“冻结”的集合。中不会有重复的值frozenset, 例如,

frozenset((1, 2)) == frozenset((1,2,2,1,1))

如果数值的缩减不打扰您,请随意使用frozenset

但是,如果您 100% 确定不希望发生上述情况,那么还有两种选择:


First方法是使用一个Counter,并使其成为hashable通过使用frozenset再次: (注意:元组中的所有内容都必须是hashable)

from collections import Counter

myDict = {}
myDict[frozenset(Counter(('A', 'B')).items())] = 'something'
myDict[frozenset(Counter(('B', 'A')).items())] = 'something else'
print(myDict[frozenset(Counter(('A', 'B')).items())])

# something else

Second方法是使用内置函数sorted,并使其成为hashable通过使其成为tuple。这将在用作键之前对值进行排序:(注意:元组中的所有内容都必须是sortable and hashable)

myDict = {}
myDict[tuple(sorted(('A', 'B')))] = 'something'
myDict[tuple(sorted(('B', 'A')))] = 'something else'
print(myDict[tuple(sorted(('A', 'B')))])

# something else

但如果元组元素不全部hashable,也不全是sortable,不幸的是,您可能不走运,需要创建自己的字典结构... D:

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

多键字典,其中键顺序无关紧要 的相关文章

  • Pandas ParserError:标记数据时出错。 C 错误:字符串内有 EOF

    我的数据超过 400 000 行 运行此代码时 f pd read csv filename error bad lines False 我收到以下错误 pandas errors ParserError Error tokenizing
  • setColumnStretch 和 setRowStretch 如何工作

    我有一个使用构建的应用程序PySide2它使用setColumnStretch用于柱拉伸和setRowStretch用于行拉伸 它工作得很好 但我无法理解它是如何工作的 我参考了 qt 文档 但它对我没有帮助 我被困在括号内的两个值上 例如
  • 使用 pyppeteer 与 asyncio 关联来抓取内容

    我用 python 结合编写了一个脚本pyppeteer随着asyncio从其登陆页面抓取不同帖子的链接 并最终通过跟踪通向其内页的 url 来获取每个帖子的标题 我这里解析的内容不是动态的 但是 我利用了pyppeteer and asy
  • 让 python 脚本打印到终端而不作为标准输出的一部分返回

    我正在尝试编写一个返回值的 python 脚本 然后我可以将其传递给 bash 脚本 问题是我想要在 bash 中返回一个单一值 但我想要一些东西一路打印到终端 这是一个示例脚本 我们称之为 return5 py usr bin env p
  • 在 ubuntu 中卸载 python 模块

    我必须删除一个名为 django 的 python 模块 一种流行的模块 因为我安装了错误的版本 1 3 py 2 6 中的 beta 如何卸载这个模块 请解释一下 因为我只在 Windows 中使用过 python 而从未在 Ubuntu
  • 将 numpy 数组及其大小写入二进制文件

    我需要将 2D numpy 数组写入文件 包括其尺寸 以便我可以从 C 程序中读取它并创建相应的数组 我编写了一些简单的代码来保存数组 并且可以从 C 读取它 但是如果我尝试先写入数组的大小 它总是会给我一个错误 这是我的简单 python
  • FastAPI UploadFile 与 Flask 相比慢

    我创建了一个端点 如下所示 app post report upload def create upload files files UploadFile File try with open files filename wb as wf
  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • 在Python中,如何通过去掉括号和大括号来打印Json

    我想以一种很好的方式打印 Json 我想去掉方括号 引号和大括号 只使用缩进和行尾来显示 json 的结构 例如 如果我有一个像这样的 Json A A1 1 A2 2 B B1 B11 B111 1 B112 2 B12 B121 1
  • Flask 和 Reactjs 抛出 JSX 转换错误

    我已经开始将 ReactJS 与 Python Flask 后端结合使用 通过 Flask 渲染模板时 我在 Chrome 控制台中收到以下客户端错误 错误 找不到模块 jstransform visitors es6 templates
  • Plotly:如何设置文本格式(下划线、粗体、斜体)

    使用注释时 我尝试在绘图中为文本添加下划线 我使用添加注释 import plotly graph objects as go g go FigureWidget make subplots rows 1 cols 1 g update l
  • python 硒 按名称查找元素

    查找电子邮件输入的正确代码是什么https accounts google com ServiceLogin html 是
  • numpy 向量化而不是 for 循环

    我用 Python 写了一些代码 运行良好 但速度很慢 我认为是由于 for 循环 我希望可以使用 numpy 命令加速以下操作 让我定义目标 假设我有一个 2D numpy 数组all CMs尺寸row x col 例如考虑一个6x11数
  • 如何读取多个文件并将它们合并到一个 pandas 数据框中?

    我想读取位于同一目录中的多个文件 然后将它们合并到一个 pandas 数据框中 如果我这样做的话它会起作用 import pandas as pd df1 pd read csv data 12015 csv df2 pd read csv
  • 从 SUDS 中的 SOAP 响应中提取 Cookie

    我必须使用具有多种服务的 API 所有这些都需要来自下面的身份验证的 JSESSION cookie 然而 当我调用下一个服务时 它不会保留 cookie 因此会拒绝它们 from suds client import Client url
  • 根据标签位置计算 Pandas DataFrame 的索引

    我正在尝试计算标签的索引Pandas https pandas pydata org DataFrame在每一列中 基本上我有以下内容DataFrame d col1 label1 label2 label3 col2 label2 lab
  • 为什么我的 Python 散点图不起作用?

    我使用 pylab 创建了一个非常简单的散点图 pylab scatter engineSize fuelMile pylab show 该程序的其余部分不值得发布 因为正是该行给我带来了问题 当我将 散点 更改为 绘图 时 它会绘制数据图
  • 如何将另一整列作为参数传递给 pandas fillna()

    我想用另一列中的值填充一列中的缺失值 使用fillna方法 我读到循环遍历每一行将是非常糟糕的做法 最好一次完成所有事情 但我不知道如何使用fillna 之前的数据 Day Cat1 Cat2 1 cat mouse 2 dog eleph
  • 混合语言源目录布局

    我们正在运行一个使用多种不同语言的大型项目 Java Python PHP SQL 和 Perl 到目前为止 人们一直在自己的私有存储库中工作 但现在我们希望将整个项目合并到一个存储库中 现在的问题是 目录结构应该是什么样的 我们应该为每种
  • Python 子进程:无法转义引号

    我知道以前曾问过类似的问题 但它们似乎都是通过重新设计参数的传递方式 即使用列表等 来解决的 但是 我这里有一个问题 因为我没有这个选项 有一个特定的命令行程序 我使用的是 Bash shell 我必须向其传递带引号的字符串 它不能不被引用

随机推荐

  • 自 iOS 10.3 起,discoverAllIdentities 和 discoveryUserIdentity 对于 CKUserIdentity.lookupInfo 返回 nil

    CKContainer discoverAllIdentities completionHandler discoveryUserIdentity recordID 完成处理程序返回 CKUserIdentity 但 lookupInfo
  • 使用 Python 在 Parquet 中嵌套数据

    我有一个文件 每行一个 JSON 这是一个示例 product id abcdef price 19 99 specs voltage 110v color white user Daniel Severo 我想创建一个包含以下列的镶木地板
  • Haskell:应用多态函数两次

    我们可以有一个多态函数f a gt b为不同的对实施a and b 我们怎样才能使 twice a gt b gt a gt c twice f x f f x 类型检查 即我怎样才能编写一个应用a的函数多态性功能两次 With Rank2
  • Android Studio 4.2.1 jarsigner 现在在哪里?

    我正在使用 Android Studio 的嵌入式 JDK C Program Files Android Android Studio jre 并且我正在使用jarsigner其中 jre bin jarsigner exe 按照描述签署
  • 应使用哪个提供程序来实现 Java Persistence API (JPA) [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想为我的 Web 应用程序使用 Java Persistence API JPA 有流行的 JPA 实现 例如休眠 Toplink and E
  • 如何删除docker0接口

    我想删除 docker0 接口 启动服务时最好避免创建接口docker0 直接使用eth0 要删除接口 请使用 ip link delete docker0 您可能需要sudo特权
  • 如何返回 ASP.NET MVC 视图中的当前操作?

    我想在我的母版页中设置一个 CSS 类 它取决于当前的控制器和操作 我可以通过以下方式访问当前控制器ViewContext Controller GetType Name 但是我如何获得当前的操作 例如Index Show etc 在 RC
  • 如何设置 Popover 视图以正确关闭

    经过一番工作后 我得到了一个弹出视图 其中显示了一个自定义 uiview 显示正确 当您点击弹出窗口视图之外时 它会按预期关闭 但是我也希望它在点击其中的按钮时关闭 有谁可以帮助我吗 努力寻找简明指南 要手动关闭弹出窗口 您需要保留对它的引
  • 如何将 Membership Provider 与 Angular.js 和 ASP.Net MVC 4 结合使用?

    我对 Angular js 非常陌生 我想使用 Angular JS 和 ASP Net MVC4 创建一个新项目 我真的很困惑如何将 Angular JS 与 MVC 4 成员资格提供程序一起使用来执行用户身份验证和授权 我可以查看一些示
  • 类型错误:意外的关键字参数传递给优化器:learning_rate

    我正在尝试加载在 Azure VM 上训练的 Keras 模型 NC 促销版 但我收到以下错误 类型错误 意外的关键字参数传递给优化器 learning rate EDIT 这是我用来加载模型的代码片段 from keras models
  • 使用RAD清理工作空间环境的方法(基于Eclipse)

    启动 RAD7 时出现很多错误 服务器不响应类更改 有时服务器无法启动 有时 RAD 不会确认我添加到服务器的模块 这是一种越野车 我知道工作区中有元数据 是否有安全的方法来清理元数据或 RAD 其中 RAD Rational Applic
  • 检查 Elixir 中的 URL 是否有效

    我想检查给定的 URL 是否有效 最好是该 url 也能解析 首先 我将如何检查字符串有效性 即正则表达式 其次 有没有办法可以查看 URL 是否确实解析为互联网上的资源 Thanks 我不会使用正则表达式 而是使用 URI 包以文本方式验
  • 在 JSF 中使用复合组件在视图中重复组件 ID

    我在公司 继承 了一个 JSF 2 JSF 2 2 7 应用程序 并面临 java lang IllegalStateException 因为两个组件似乎具有相同的 ID 视图的结构如下 我提取了相关代码用于说明目的 它可能包含一些拼写错误
  • 仅当不通过 XCode 运行时,iOS 才会崩溃。巧合?

    我的应用程序仅在不使用 XCode 调试器运行时才会崩溃 很难跟踪 因为我无法调试 但我终于弄清楚了 这是因为对一些不属于我的对象调用了release 在我更正之前 我在这里搜索并发现了 2 个相关问题 链接如下 iOS 应用程序在设备上单
  • git 上有用于重置后的钩子吗?

    我有一些所有开发人员都必须更改的本地文件 我将文件标记为 假设未更改 但这并不能阻止它们在重置时发生更改 git 上是否有一个在 git 重置后执行的钩子 如果没有 有人对如何处理这种情况有建议吗 您可以找到以下列表Git 挂钩在这里 ht
  • 如何在 VC++ 中重新启动我自己的应用程序

    正在开发 VC 应用程序 弄清楚如何重新启动我自己的应用程序 有人可以举一些例子吗 编写一个程序 它将 等待您的应用程序终止 再次运行它 调用该程序 然后退出您的应用程序 该解决方案应用相当广泛 另外一个选择 使用特定参数调用您的应用程序
  • 使用分页集合时的 ​​Angularjs 承诺链

    我正在使用一个 REST api 它为 GET 请求提供分页响应 如下所示 count 43103 previous null next http ecoengine berkeley edu api photos page 2 resul
  • Android Studio 和 Gradle,@NotNull 参数的参数 0

    我正在尝试在 Android Studio 中使用 Gradle 制作一个应用程序 但我收到的只是以下错误消息 java lang IllegalArgumentException Argument 0 for NotNull parame
  • 将 Pandas 列表列拆分为多列

    我有一个带有一列的 Pandas DataFrame import pandas as pd df pd DataFrame teams SF NYG for in range 7 teams 0 SF NYG 1 SF NYG 2 SF
  • 多键字典,其中键顺序无关紧要

    我正在尝试创建一个以两个字符串作为键的字典 并且我希望键按任何顺序排列 myDict A B something myDict B A something else print myDict A B 我希望这段代码可以打印 其他内容 不幸的