Python字典的“<”是什么意思?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (70)

我注意到Python让我这样做:

>>> {1: "foo"} < {2: "bar"}
True

<当应用于Python中的字典时,什么是语义?

我可以在哪里找到<任何给定类型集合的语义?例如:

>>> help(dict.__cmp__)

Help on wrapper_descriptor:

__cmp__(...)
    x.__cmp__(y) <==> cmp(x,y)

>>> help(cmp)

Help on built-in function cmp in module __builtin__:

cmp(...)
    cmp(x, y) -> integer

    Return negative if x<y, zero if x==y, positive if x>y.
提问于
用户回答回答于

元组和列表

元组和列表按照字典顺序使用相应元素的比较进行比较。这意味着为了比较相等,每个元素必须相等并且两个序列必须是相同类型并且具有相同长度。 如果不相等,序列的顺序与它们的第一个不同元素相同。例如,cmp([1,2,x],[1,2,y])与cmp(x,y)的返回值相同。如果相应的元素不存在,则首先排序较短的序列(例如,[1,2] <[1,2,3])。

字典

当且仅当它们的排序(键,值)列表比较相等时,映射(字典)比较相等。(这个实现可以有效地计算它,不需要构造列表或排序。)除了平等以外的结果一直得到解决,但没有另外定义。(早期版本的Python [2.7.6之前版本]使用排序(键值)列表的字典对比,但这对于比较相等性的常见情况是非常昂贵的。甚至更早的Python版本仅通过身份比较字典,但这引起了惊喜,因为人们希望能够通过将字典与{}进行比较来测试字典是否空虚。)

另外,它专门比较序列类型与自己和其他类型,

序列对象可以与具有相同序列类型的其他对象进行比较。比较使用了词典排序:首先比较前两项,如果它们不同,则确定比较结果; 如果它们相等,则比较下两个项目,等等,直到任何一个序列被耗尽。如果要比较的两个项目本身是同一类型的序列,则字典对比将递归执行。如果两个序列的所有项目比较相等,则序列被认为是相等的。如果一个序列是另一个序列的初始子序列,则较短的序列是较小(较小)的序列。字符串的字典排序使用单个字符的ASCII排序。 请注意,比较不同类型的对象是合法的。结果是确定性的,但是是任意的:这些类型是按其名称排序的。因此,一个列表总是小于一个字符串,一个字符串总是小于一个元组等等(不应该依赖于比较不同类型对象的规则;它们可能会在未来版本的语言中改变)混合数字类型根据它们的数值进行比较,所以0等于0.0等。

根据Python 2.7源代码,实际的字典比较是这样

  1. 首先比较键的长度。(-1如果第一个键较少,1则返回,如果第二个键较少)
  2. 如果它们是相同的,那么它会尝试找到一个密钥,以便在其他或不同的密钥中丢失密钥(这称为特征字典
  3. 它的第2步,无论是方式,都a, bb, a。如果其中任何一个都是空的,那么这两个字典都被假定为相等。
  4. 现在,我们从表征词典中得到的差异将被比较以得到实际的比较结果。

热门问答

云服务器中ping不可达,请教一下如何恢复?

推荐已采纳
本地主机 ping 不通实例可能由以下问题导致: 目标服务器的设置不正确 域名没有正确解析 链路故障 在确保本地网络正常的前提下(即您可以正常 ping 通其他网站),可根据以下操作进行排查: 检查实例是否配置公网 IP 检查安全组设置 检查系统设置 检查域名是否备案 检查域名解...... 展开详请

为什么加固之后生成四个文件?

腾讯云@移动安全

腾讯 · 移动开发工程师 (已认证)

腾讯云移动安全前端开发
推荐

选择最后一个_legu_aligned_signed.apk 文件,这个是加固并已重签名的文件。

COS Javascript SDK 为何没有 getService 方法?

因为 getService 请求的是 service.cos.myqcloud.com 或 cos.<Region>.myqcloud.com 域名,前端直接请求会导致跨域问题。 前端 js sdk 直接请求 bucket/object 相关的接口,虽然也会跨域,但你可以在 你...... 展开详请

iot设备通过mqtt协议连接,没有办法设置clientid?

DylanRichard

腾讯 · 产品经理 (已认证)

万物互联的时代,欢迎来到IoT的世界
推荐

物联网接入层有设备互踢的逻辑,如果是用同一个设备 ID 在不同地方登录,会导致其中一方被另一方踢下线。因此发现设备一直上下线时,需要确认是否有不同的人或者多线程在使用同一个设备 ID 执行登录操作。

实时语音识别支持c#平台吗?

支持的。虽然SDK没有C#的,但是可以通过API进行请求

如何延长签名有效期?

yinshawnrao

腾讯 · Web开发工程师 (已认证)

腾讯云搬砖工
推荐

如果需要自己生成签名,可以使用对象存储COS的SDK工具,里面有提供方法,获取下载链接,签名时间可以参数控制。

https://cloud.tencent.com/document/product/436/7753

所属标签

扫码关注云+社区

领取腾讯云代金券