首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python检查str是否在对象列表中

python检查str是否在对象列表中
EN

Stack Overflow用户
提问于 2019-01-30 00:14:42
回答 1查看 65关注 0票数 0

我有课要上。简而言之,要进行初始化,您必须在创建它时为其提供一些值:

代码语言:javascript
复制
class Silo:

  def __init__(self, id, name, netid, node):
    self.id = id
    self.name = name
    self.node = node
    self.netid = netid

我可能有多个竖井,它们是通过sqllite数据库动态创建的。为了清楚起见,我放弃了数据库查询的代码,而是在我的示例中打印了下面的竖井列表:

代码语言:javascript
复制
global siloList # siloList is a list of the Silos objects.
siloList = {} # Initialize
print(silos) # return: [(1, 'Silo 1', 1, 1), (2, 'Silo 2', 1, 4)]
for silo in silos: # loop through silos for each silo
  newSilo = Silo(silo[0], silo[1], silo[2], silo[3]) # Create the object from Silo class
  siloList[silo[0]] = newSilo # Create a list for each Silo object with the ID as the index

我想根据我输入的名称来检索每个对象的ID,这样我就可以使用该类进行操作。

例如:

代码语言:javascript
复制
userInput = "Silo 2"
# Obtain "2" based on input "Silo 2" somehow
siloList[2].netid = 9 # Change the netid with siloList[id]

不过,我想不出如何从出现在其中的名称中获取该对象的id。

我找到了一个silo = next((x for x, obj in enumerate(siloList) if obj['name'] == userInput), None),但这给了我一个错误的TypeError: 'int' object is not subscriptable,我不太清楚如何让它满足我的需求(或者它是否可以工作,或者其他什么会更好)。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-30 00:29:36

您可以使用以下命令获取匹配的SiloID的列表

代码语言:javascript
复制
matching_silo_ID_list = list(id_ for id_ in siloList if siloList[id_].name == userInput)  

如果您确定匹配列表只有一个元素,则可以安全地使用

代码语言:javascript
复制
matching_ID = matching_silo_ID_list[0]

去做

代码语言:javascript
复制
siloList[matching_ID].netid = 9

注意:我猜你的siloList = {}实际上是一本字典。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54425281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档