Iterating over dict values - 与此问题相关:
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个值,然后如果值在密钥中则返回密钥
答案 0 :(得分:3)
下面,方法bla
返回数据库键,如果x和y分别匹配与键对应的元组的第一个和第二个元素(任何长度):
def bla(self, x, y)
for key, value in self.DataBase.iteritems():
if (x, y) == value[:2]:
return key
现在在下面,如果作为元组的数据库值同时包含x和y,方法bla
将返回数据库密钥:
def bla(self, x, y)
for key, value in self.DataBase.iteritems():
if x in value and y in value:
return key
答案 1 :(得分:2)
由于您在问题中说“返回密钥”,我假设您实际上想要隔离字典中的键,其值与某些搜索参数集匹配(您发布的代码片段返回值,而不是键)。假设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的键。如果需要匹配元组中的特定位置,则理解中的条件可以更改为if x == self.Database[i][1] and y == self.Database[i][2]
。
如果您没有使用钥匙,请澄清您的问题。
答案 2 :(得分:1)
您可以使用内置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()
的方法,这样你就可以在迭代dict时解包元组:
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