字典键中的多值搜索
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()
来设置 x
和 y
变量。
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
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()
来设置 x
和 y
变量。
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