python中字典的索引_在Python中使用范围作为字典索引

2023-10-30

本问题已经有最佳答案,请猛点这里访问。

是否可以做如下的事情:

r = {range(0, 100): 'foo', range(100, 200): 'bar'}

print r[42]

> 'foo'

所以我想使用一个数字范围作为字典索引的一部分。为了使事情更复杂,我还想使用多个索引,如('a', range(0,100))。所以这个概念在理想情况下应该可以扩展到这一点。有什么建议吗?

这里也提出了类似的问题,但我对全面的实施感兴趣,而不是对该问题的不同方法感兴趣。

范围是固定的吗?比如说,对于某个整数x,都是range(x*100, (x+1)*100)?

@假尘埃:是的,固定范围

考虑到问题的放松,我会给出一个更简单、更有效的答案。

看看这个质量保证。它与:class RangeDictionary(TransformedDict): def __keytransform__(self, key): dk = sorted(self.keys()) return dk[bisect.bisect(dk, key)],然后r = RangeDictionary({100: 'foo', 200: 'bar', 250: 'xyz'}); print(r[42]); print(r[142]); print(r[242])生产foo bar xyz。仅覆盖def __getitem__(self, key): return self.store[self.__keytransform__(key)]。

如果您在python 3.x上,可以使用range对象作为键,但要检索值,您需要执行以下操作:

In [33]: r = {range(0, 100): 'foo', range(100, 200): 'bar'}

In [34]: { r[key] for key in r if 42 in key}

Out[34]: {'foo'}

在python2.x中不能这样做的原因是因为2.7版本以后的range函数返回一个列表,并且列表不能用作字典键,因为它们不提供有效的__hash__方法。

很好,谢谢。现在真的是时候转向Python3了。不幸的是,这个项目是在2.7。

作为一种替代方法,如果您试图查找与特定范围相关的值,可以使用内置的python bisect库,如下所示:

import bisect

def boundaries(num, breakpoints=[100, 200], result=['foo', 'bar']):

i = bisect.bisect(breakpoints, num-1)

return result[i]

print boundaries(42)

这将显示:

foo

如果您有一种简单的方法从一个点计算范围,例如,如果所有范围都是固定大小,则可以使用:

def getIndex(p):

start = floor(p/100)*100

return (start, start+100)

然后定义听写:

r = {(0, 100): 'foo', (100, 200): 'bar'}

和访问:10

该方法的有效性如下:

您没有为范围内的每个数字保留dict中的项目(这也允许您拥有真正的值"keys")。

您不需要通过整个dict来查找值,得到的值是o(1)

另外,您的getIndex函数可能更复杂,例如,如果您的范围在长度上不规则,您的getIndex函数可以二进制搜索范围边界的排序列表并返回范围元组,不再是O(1),但O(log(n))也不错……

只能将不可变的数据类型用作键。所以没有列表。

但可以使用元组定义上界和下界。

r = {(0,100): 'foo', (100,200): 'bar'}

我可以这样得到42的值:

res =""

for (k1,k2) in r:

if (k1 < 42 and k2 > 42):

res = r[(k1,k2)]

print(res)

但我承认你不需要字典。

编辑了我的答案

谢谢-我现在该怎么办?:)

添加到我的答案中

您可以使用列表理解获得所需的字典:

d = dict([(i,'foo') for i in range(0, 100)] + [(i,'bar') for i in range(100, 200)])

print d

你可以排成一行

r = dict(zip(range(200),["foo"]*100+["bar"]*100))

你可以用这个:

r=dict(zip(range(100),["foo"]*100))

r2=dict(zip(range(100,200),["bar"]*100))

r.update(r2)

现在这是正确的方法!我很高兴有人强调。

这是低效的。

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

python中字典的索引_在Python中使用范围作为字典索引 的相关文章

  • 数据结构——链表课后习题解答

    学习完链表 做了一遍题 码完代码 能跑的都跑了一遍 检验了一下 答案若有错误 欢迎指出 感谢 以下是题目和答案 以下题目若没有指出 全是用单向链表 目录 1 逆序一个链表 2 如何判断一个链表是否有环 3 求链表的中间节点 要求只用一重循环
  • 【speech&nlp】如何实现总体数据按照长短排序,同样长度数据随机排序

    在做speech nlp任务时 经常有这样一个需求 假设有一个数据集 有1000条数据 但是只有100种长度 所以必然存在某些数据是一样长的 我们想要让总体按照长短排序 但是同样长的数据要随机排序 经过了这个操作 再分batch 这样的效果
  • jmeter做接口压力测试_jmeter接口性能测试

    jmeter是apache公司基于java开发的一款开源压力测试工具 体积小 功能全 使用方便 是一个比较轻量级的测试工具 使用起来非常简单 因为jmeter是java开发的 所以运行的时候必须先要安装jdk才可以 jmeter是免安装的
  • 解决vscode找不到Python自定义模块,报错No module named ‘xxx‘

    笔者最近在学习python过程中 把在pycharm运行成功的项目放在vscode中 发现一些报错 比如找不到笔者自定义的模块 参考了一些说法与办法 现将解决方法记录于此 前言 vscode之所以找不到自定义模块 与其PYTHONPATH有
  • 将yolov5检测结果保存成json文件

    将yolov5检测结果保存成json文件 每帧图片对应一个json文件 json文件中包含图片名称 检测到的bbox信息 分类结果 中心坐标和置信度 函数json add以图片名 该图像内的所有bbox信息 以及bbox数量为输入 在yol
  • PCB画板(Altium Designer)

    b站学习视频 1 https www bilibili com video BV1ei4y1L7TU spm id from 333 999 0 0 这力荐 2 https www bilibili com video BV1tE411g7
  • 判断多边形凹凸

    任意给定一个多边形 判断它是凸还是凹 多边形的顶点以逆时针方向的序列来表示 include
  • 关于小程序中如何获取openid

    想要获取用户的openid首先要明白获取的过程 1 登录 2 发请求获取openid 实现 先定义一组数据 后面发请求获取openid时要的参数 一个是appid 一个是secret秘钥 这两个在注册开发者平台后可以查到 如下 global
  • 【Vulnhub系列】DC1

    文章目录 基本信息 实验过程 额外内容 使用CVE2014 3704添加管理账号 另一种查询具有root权限命令的find语句 下载地址 https www vulnhub com entry dc 1 1 292 基本信息 Kali 19
  • Counterfactual Zero-Shot and Open-Set Visual Recognition

    Counterfactual Zero Shot and Open Set Visual Recognition 1 Introduction 文献提出一个反事实框架 是由对不可见类的泛化来支撑的 作者基于反事实的一致性规则 反事实确实是基
  • C++同步技术——Mutex相关 (转)

    进程的互斥运行 正常情况下 一个进程的运行一般是不会影响到其他正在运行的进程的 但是对于某些有特殊要求的如以独占方式使用串行口等硬件设备的程序就要求在其进程运行期间不允许其他试图使用此端口设备的程序运行的 而且此类程序通常也不允许运行同一个
  • 大数据技术面试-Flume、kafka

    大数据技术面试 Flume kafka 1 Flume组成有哪些 2 Flume拦截器有哪些知识点 3 Flume采集数据会丢失吗 4 FileChannel如何优化 5 如何控制Kafka丢不丢数据 6 Kafka分区分配策略默认哪两种
  • 【华为机试刷题笔记】HJ26-字符串排序

    题目描述 编写一个程序 将输入字符串中的字符按如下规则排序 规则 1 英文字母从 A 到 Z 排列 不区分大小写 如 输入 Type 输出 epTy 规则 2 同一个英文字母的大小写同时存在时 按照输入顺序排列 如 输入 BabA 输出 a
  • I.MX6U开发板交叉编译Qt项目(什么是交叉编译器;如何搭建Qt交叉编译环境;WinSCP将Windows中的文件传到Ubuntu中;如何将编译好的执行文件拷到开发板上)

    文章目录 1 关于嵌入式学习的一些思考 1 1 使用imx6 还是stm32mp 1 2 关于是否需要买板子 2 I MX6U开发板交叉编译Qt项目 2 1 什么是交叉编译器 2 2 安装交叉编译器 2 2 1 下载交叉编译器和资料 2 2
  • 用FLEX实现屏幕快照及下载 flex导出excel文件

    用FLEX实现屏幕快照及下载 Flex Flash Flex2 Flex3 GgNET 01月 31st 2008 2 53am 这种方式 在服务器端不会在磁盘上生成图片FLEX代码public function printMap void
  • 分析脚本搭建docker环境:python, R

    1 搭建Anaconda Python3 6 FROM nvidia cuda 8 0 cudnn6 devel ubuntu16 04 MAINTAINER Tyan
  • TP-Link-IPC使用rtsp推流

    文章目录 1 安装 2 使用 3 RTSP 1 安装 电源 WIFI 2 使用 扫码或官网下载APP 登录绑定查看IP 登录IE浏览器 输入账号密码默认admin 123456 3 RTSP 注意 通过RTSP可以取视频流 但不支持控制云台
  • Linux samba网络传输服务

    Linux samba网络传输服务 本文章适合的读者 Linux初 中级用户 开源软件爱好者 大中专院校的学生 社会培训学生 Linux下的开发人员 samba 使用smb协议的应用程序 主要用于文件共享 SMB service messa
  • 实验七-卷积编码的MATLAB实现

    信息论编码实验3 9连载 更多看专栏 实验七 卷积编码的MATLAB实现 一 卷积码原理介绍 1 1 基本概念 1 2 n k N 卷积编码 1 2 1 编码 1 2 2 译码 Viterbi 译码算法 二 代码展示及运行结果 2 1 2

随机推荐

  • Mybatis处理一对多关系时的性能考虑

    Mybatis对于处理一对多的情况有三种解决方案 查询的时候join子表 然后交由mybatis拼装 查询的时候不join子表 另外发起select去抓取子表数据 和第二种类似 只不过利用fetchType lazy来延缓抓取的时机 这三种
  • JWT——Token认证的两种实现和安全详解

    前言 最近因为项目中需要解决跨域取值的问题 所有考虑到用Token认证做技术支撑点 自己看了许多与之相关的文章 从中总结出了以下两个要点 签名和token时间 在说这两个要点之前先大概简单说一下与之有关的一些问题 首先 如果你对token认
  • 【IT之路】连接MySQL遇到ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor:yes)问题

    一般这个错误是由密码错误引起 解决的办法自然就是重置密码 假设我们使用的是root账户 1 重置密码的第一步就是跳过MySQL的密码认证过程 方法如下 vim etc my cnf 注 windows下修改的是my ini 在文档内搜索my
  • DenseNet网络详解及Pytorch实现

    DenseNet网络详解及Pytorch实现 DenseNet网络简介 DenseNet Densely Connected Convolutional Networks 是由Gao Huang等研究人员于2017年提出的一种深度神经网络架
  • dva.js 知识导图

    JavaScript语言 JavaScript语言 不要用 var 而是用 const 和 let 分别表示常量和变量 不同于 var 的函数作用域 const 和 let 都是块级作用域 模板字符串 模板字符串提供了另一种做字符串组合的方
  • HTTP与TCP的区别和联系

    相信不少初学应用网络程序开发的朋友都想知道Http与Socket连接究竟有什么区别 希望通过自己的浅显理解能对初学者有所帮助 一 基本概念 1 TCP连接 手机能够使用联网功能是因为手机底层实现了TCP IP协议 可以使手机终端通过无线网络
  • Java中常用的一种时间格式的转换方法

    有时需要将一种格式的时间转化成其他格式的时间 这里列举了一种常用的转换方法 将从控件获得类似于 Thu Jan 01 00 00 00 CST 2009 的时间格式转化称 yyyy MM dd 格式 DateFormat format1 n
  • Java基础16--面向对象:抽象类

    Java基础16 面向对象 抽象类 文章目录 Java基础16 面向对象 抽象类 概述 抽象类 继承抽象类 抽象方法 抽象类总结规定 概述 在面向对象的概念中 所有的对象都是通过类来描绘的 但是反过来 并不是所有的类都是用来描绘对象的 如果
  • 带你知道如何在Flask中集成支付宝第三方支付模块并进行联调?

    支付宝沙箱 支付宝沙箱基础配置 支付宝开放平台 如果从www alipay com访问 选择我是开发者 支付宝扫码登录 身份 自研开发者 控制台 gt 开发服务 gt 沙箱 gt 沙箱应用 沙箱 协助开发者进行接口开发及主要功能联调的模拟环
  • vue2.0 关于 vue.config.js配置项详解

    const CompressionPlugin require compression webpack plugin 引入gzip压缩插件 const TerserPlugin require terser webpack plugin 代
  • 基于Selenium+Python的web自动化测试框架详解

    目录 一 什么是Selenium 二 自动化测试框架 三 自动化框架的设计和实现 四 需要改进的模块 五 总结 一 什么是Selenium Selenium是一个基于浏览器的自动化测试工具 它提供了一种跨平台 跨浏览器的端到端的web自动化
  • iOS之LLVM编译流程和Clang插件开发集成

    LLVM 简介 一 什么是 LLVM LLVM 是构架编译器 compiler 的框架系统 以 C 编写而成 用于优化以任意程序语言编写的程序的编译时间 compile time 链接时间 link time 运行时间 runtime 以及
  • 读书:《少即是多》

    少即时多 是本田直之的一本书 他还写过 杠杆阅读术 杠杆时间术 杠杆思考术 等 现在社会 物质财富的获得变得相对容易 但并没有让人更幸福 或者快乐持续的时间很短 随之而来的是担心 忧虑和负担 真正带来幸福的反而是减法 如何做减法 断舍离 L
  • 0)Visual C++2017概述

    文章目录 一 概述 二 字符集 1 C运行时库对Unicode的支持 2 C 标准库对Unicode的支持 3 Windows API 对Unicode 的支持 4 Visual C 2017对Unicode 的支持 三 SDK编程基础 1
  • 软件开发的未来已来:大数据、AI和云原生的终极融合如何引爆市场

    文章目录 1 智能化应用程序的崛起 2 实时数据分析和反馈 3 云原生的灵活性和可扩展性 4 跨行业的影响 5 数据驱动的决策 6 新的商业模式和机会 个人主页 程序员 小侯 CSDN新晋作者 欢迎 点赞 评论 收藏 收录专栏 大数据系列
  • 【LAMMPS系列】LAMMPS安装WIN并行版

    大家好 我是粥粥 LAMMPS 是一种经典的分子动力学代码 专注于材料建模 它是大型原子 分子大规模并行模拟器的首字母缩略词 LAMMPS 具有固态材料 金属 半导体 和软物质 生物分子 聚合物 以及粗粒或中等系统的势函数 它可用于模拟原子
  • 使用 KubeSkoop exporter 监测和定位容器网络抖动问题

    本文是 8 月 17 日直播的文字稿整理 微信公众号 阿里云云原生 可观看直播回放 除去文章内容外 还包括针对实际网络问题的实战环节 容器网络抖动问题发生频率低 时间短 是网络问题中最难定位和解决的问题之一 不仅如此 对 Kubernete
  • 小米手机自动进入Recovery恢复模式,且不停重启

    问题描述 2017年2月13日购买的小米手机 5S Plus 日前手机突然进入了 Recovery 模式 且重启手机又自动进入 Recovery 模式 不管它就不停的重启 连关机都做不到 即使把电用完 一直按住 电源键 和 音量键下 进入F
  • 预处理数据的方法总结(使用sklearn-preprocessing)

    预处理数 1 标准化 去均值 方差规模化 Standardization标准化 将特征数据的分布调整成标准正太分布 也叫高斯分布 也就是使得数据的均值维0 方差为1 标准化的原因在于如果有些特征的方差过大 则会主导目标函数从而使参数估计器无
  • python中字典的索引_在Python中使用范围作为字典索引

    本问题已经有最佳答案 请猛点这里访问 是否可以做如下的事情 r range 0 100 foo range 100 200 bar print r 42 gt foo 所以我想使用一个数字范围作为字典索引的一部分 为了使事情更复杂 我还想使