字典键中的多值搜索

Multiple value search in dictionary keys

- 与此问题相关:

def bla(self,x,y)   
    for i in self.DataBase.keys():
        for x,y in self.DataBase[i]:
            if x == dept and y == year:
                return self.DataBase[i]

这更多是我想要实现的想法,我如何获取一个键并在键中搜索 n 个值,然后 return 如果值在键中

既然你在问题中说了 "return the key",我假设你实际上想要隔离字典中的键,其值匹配一些搜索参数集(你发布的代码片段 returns 值,而不是键)。假设 self.Database 是一本字典,您可以将键提取为列表理解,如下所示:

def getMatchingKeys(self, x, y):
  '''Extract keys whose values contain x and y (position does not matter)'''
  return [i for i in self.Database if x in self.Database[i] and y in self.Database[i]]

将返回其值同时包含元组中任何位置的 x 和 y 的键。如果你需要匹配元组中的特定位置,comprehension 中的条件可以更改为类似 if x == self.Database[i][1] and y == self.Database[i][2] 的内容。

如果您不是在寻找钥匙,请澄清您的问题。

下面,方法 bla returns 如果 x 和 y 分别匹配元组的第一个和第二个元素(无论长度如何),则数据库键对应于键:

def bla(self, x, y)   
    for key, value in self.DataBase.iteritems():
        if (x, y) == value[:2]:
            return key

现在下面,方法 bla returns 如果数据库值是一个元组,则数据库键包含 x 和 y:

def bla(self, x, y)   
    for key, value in self.DataBase.iteritems():
        if x in value and y in value:
            return key

您可以使用内置的 map() 来设置 xy 变量。

def bla(self,x,y) :
    for key in self.DataBase :
        x,y = map(float, self.DataBase[key])
        if x == dept and y == year:
            return key

如果您更喜欢使用 items(),您也可以执行以下操作(同样有效):

def bla(self,x,y):
    for key, val in self.DataBase.items():
        x, y = map(float, val)
        if x == dept and y == year:
            return key

这里还有另一种不用 map() 的方法,这给了你在遍历字典时解包元组的优势:

 def bla(self,x,y):
    for key, (x, y) in self.DataBase.items():
        if x == dept and y == year:
            return key

你也可以这样写,使用列表理解,虽然我会说上面的那个更好:

def bla(self,x,y):
    found = {key for key, (x, y) in self.DataBase.items() if x==dept and y==year}
    found = ''.join(num) #joins set into string
    return found

以下所有适用于 Python 3,我认为这是您想要的,因为您的标签之一是 Python 3.x