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

时间:2019-01-29 16:14:42

标签: python python-3.x

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

class Silo:

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

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

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,以便可以对该类进行操作。

例如:

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,我还不太清楚如何使它满足我的需要(或者即使它可以工作,或者会更好) )。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用

获取匹配的Silo的ID的列表。
matching_silo_ID_list = list(id_ for id_ in siloList if siloList[id_].name == userInput)  

如果您确定匹配列表中只有一个元素,则可以放心使用

matching_ID = matching_silo_ID_list[0]

要做

siloList[matching_ID].netid = 9

NB。我猜您的siloList = {}实际上是一本字典。