我不知道我试图做的是不是Pythonic,我只是试图做错,或者我不知道如何正确地提出这个问题.能够做到这一点对我来说是有意义的,但我已经搜索了15种不同的方法,但找不到答案.

我想做的事情看起来很简单:我有一个对象列表.我想通过对象的属性访问该列表.此代码有效:

class Fruit:

def __init__(self, name, color):

self.name = name

self.color = color

def __str__(self):

return self.name

class BaseballPlayer:

def __init__(self, name, number, position):

self.name = name

self.number = number

self.position = position

def __str__(self):

return self.name

class ListByProperty(list):

def __init__(self, property, list):

super(ListByProperty, self).__init__(list)

self.property = property

def __getitem__(self, key):

return [item for item in self if getattr(item, self.property) == key][0]

fruits = ListByProperty('name', [Fruit('apple', 'red'), Fruit('banana', 'yellow')])

baseballTeam = ListByProperty('position', [BaseballPlayer('Greg Maddux', 31, 'P'),

BaseballPlayer('Javy Lopez', 8, 'C')])

teamByNumber = ListByProperty('number', baseballTeam)

print 'Apples are', fruits['apple'].color

pitcher = baseballTeam['P']

print 'The pitcher is #%s, %s' % (pitcher.number, pitcher)

print '#8 is', teamByNumber[8]

>>> Apples are red

The pitcher is #31, Greg Maddux

#8 is Javy Lopez

但是,我真的必须让我自己的列表类做这么简单的事情吗?除了循环或listcomp之外,没有通用的方法吗?这似乎应该是一个非常常见的事情,通过对象的属性获得列表中的对象和访问项.它似乎应该以类似于sorted(key = …)的方式得到普遍支持.

请注意,这与需要dict的情况不同.实际上,使用对象列表而不是字典的全部意义在于避免必须执行以下操作:

fruits = {'apple': Fruit('apple', 'red')}

…这需要你输入两次苹果.看起来应该有一种通用的方法来做这样的事情:

print 'Apples are', fruits['apple'].color

…无需子类列表.

好吧,你可以建立一个像这样的字典:

fruits = [Fruit('apple', 'red'), Fruit('banana', 'yellow')]

fruits = {f.name: f for f in fruits}

或者你可以单行,但看起来仍然……呃……语法上是酸的?

标签:python

来源: https://codeday.me/bug/20190623/1275474.html

python如何访问对象的属性_按对象属性访问Python对象列表相关推荐

  1. 对象删除某个属性_充分了解JavaScript中【对象】的概念(二)

    点击上方「蓝字」关注我们 之前的文章: 充分了解JavaScript中[对象]的概念(一) 这篇文章我们继续来讲解JavaScript中[对象]的概念,因为这是一系列的文章,所以建议从第一篇文章开始看 ...

  2. networkx edge 属性_一文读懂Python复杂网络分析库networkx | CSDN博文精选

    作者 | yyl424525 来源 | CSDN博客 文章目录 1. 简介 安装 支持四种图 绘制网络图基本流程 2. Graph-无向图 节点 边 属性 有向图和无向图互转 3. DiGraph-有 ...

  3. activexobject对象不能创建_脚本语言系列之Python | Python面向对象

    Python是做自动化工作首选的一门语言,与更复杂的语言相比,Python 非常便于快速学习.语法很少,具有良好的 可读性,即使测试工程师们没有丰富的编码经验,也能快速学会:Python 的极简风格对 ...

  4. python的控件text的文本属性_只需6行Python代码就给图片加上水印——你一看就会了...

    大家在做项目开发的过程中,会不会经常遇到需要处理图片却没有快速有效的工具的情况呢?比如客户需要给图片加上水印,你可能会用到PS这些高级软件去处理,这样虽然有效果但是需要相对较长的时间:作为程序猿,你一 ...

  5. java 对象拷贝属性_使用Java对两个对象的属性进行拷贝

    最近和Java的反射打交道比较多一点,可能是因为自己以后的方向是架构师的缘故吧,他们主要搞业务.我能也就搞架构,整天画一些流程图. 虽然对于只有一年实习经验的我,不知道这样是否好,但是我还是那句话,不 ...

  6. python中常用的序列化模块_使用pickle模块对python对象进行序列化

    pickle模块是Python自带的一个标准模块,专用于Python各种对象的序列化和反序列化,可用于Python内置的各种数据对象(Python中一切都是对象),也可用于程序员自定义的类和对象. p ...

  7. python用类名直接调用方法_一文读全 Python 的面向对象编程方法

    背景介绍: Python 支持三种形式的编程,分别是:"命令式"."函数式"和"面向对象式". 很多优秀的开源 Python 项目里都用到了 ...

  8. python刷题一亩三分地_手把手教你用python抓网页数据【一亩三分地论坛数据科学版】...

    前言:. visit 1point3acres.com for more. 数据科学越来越火了,网页是数据很大的一个来源.最近很多人问怎么抓网页数据,据我所知,常见的编程语言(C++,java,pyt ...

  9. python统计特定类型文件数量_分享一些常见的Python编程面试题及答案

    需要领取更多Python学习资料的朋友,可以免费自取哈 [腾讯文档]Python相关学习资料(视频.学习经验) https://docs.qq.com/doc/DS1JxU2ZWTmVWa05L 1. ...

  10. python 内存溢出能捕获吗_从0基础学习Python (19)[面向对象开发过程中的异常(捕获异常~相关)]...

    从0基础学习Python (Day19) 面向对象开发过程中的=>异常 什么是异常 ​ 当程序在运行过程中出现的一些错误,或者语法逻辑出现问题,解释器此时无法继续正常执行了,反而出现了一些错误的 ...

最新文章

  1. 张杰和机器人_《80后脱口秀》吐槽高考 张杰化身“机器人”
  2. Safari调试iOS应用
  3. mysql不支持union_Mysql中Union的子句不支持order by
  4. 算法实践--最小生成树(Kruskal算法)
  5. axios config里自定义属性,使用拦截器拦截,无法拿到自定义属性问题
  6. 95-280-035-源码-资源管理-计算资源管理-TaskSlot
  7. java development kit64_Java SE Development Kit (JDK) v14.0 x64
  8. Linux下的字符界面扫雷游戏
  9. 变分模态分解(VMD)前言
  10. ffmpeg处理YUV422和YUV420P相互转换
  11. 盘点常用的IDC综合业务、财务及用户管理平台
  12. 什么是Cat.1,Cat.1和4G之间的区别
  13. MSP430学习总结——定时器
  14. 专用播放器到底是些什么东西?
  15. centos7 应用笔记: fslint 文件查重
  16. Android常用技巧总结
  17. Python爬虫日记2——使用requests
  18. 楚云飞悼念李云龙之广播
  19. 一文搞懂使用Nginx服务器部署前端Web项目
  20. 数据库时代的终结(转)

热门文章

  1. swagger和knife4j常用配置
  2. HTML学习(下)前端入门很简单
  3. 西安 下雪 记录点什么
  4. 长期失眠会导致那些危害
  5. cad模糊查询符号_SQL实现 模糊查询(转)
  6. SSM毕设项目鲜花销售网站1s2s7(java+VUE+Mybatis+Maven+Mysql)
  7. (zz)从callback的角度来理解.NET/C# 中的 委托 (delegate)与 事件 (event)
  8. 强人教你吃自助火锅(转)
  9. AndroidManifest 合并冲突处理
  10. 因果推断(一):因果推断两大框架及因果效应