Python 返回键匹配值--添加约束
首先基于值搜索Python字典,以获得键输出对我来说很有意义。但是,如果我们想在搜索中添加另一个约束,该怎么办 例如,我在这里搜索字典(多维)以查找最低值,然后返回该最低值的键:Python 返回键匹配值--添加约束,python,dictionary,Python,Dictionary,首先基于值搜索Python字典,以获得键输出对我来说很有意义。但是,如果我们想在搜索中添加另一个约束,该怎么办 例如,我在这里搜索字典(多维)以查找最低值,然后返回该最低值的键: minValue[id] = min(data[id].items(), key=lambda x: x[1]) 由于此方法只返回一个与该值匹配的键,而可能有多个键,因此我想添加另一个约束 是否有一种优雅的方法可以添加:返回包含整体最小值且具有匹配项中最长长度的键?好的,您可以将长度添加到键函数: >>&
minValue[id] = min(data[id].items(), key=lambda x: x[1])
由于此方法只返回一个与该值匹配的键,而可能有多个键,因此我想添加另一个约束
是否有一种优雅的方法可以添加:返回包含整体最小值且具有匹配项中最长长度的键?好的,您可以将长度添加到键函数:
>>> data = {'a': 1, 'aa': 1, 'b': 2, 'c': 3}
>>> min(data.items(), key=lambda x: x[1])
('a', 1)
>>> min(data.items(), key=lambda x: (x[1], -len(x[0])))
('aa', 1)
但是如果有两个具有相同的值和相同的长度呢?您又回到了同样的问题,即不知道输出将是什么。我可能会建立一个匹配键值对的列表,然后对它们进行排序,但正确的做法可能取决于键值的实际含义。我认为一个具体的示例将有助于澄清字典的外观,因为python不直接提供多维dict 我假设它看起来是这样的:
data={'a':1,'b':2,'b':3}
(注意,这不是有效的python!),因此当您执行min(data[id].items(),key=lambda x:x[1])
时,您希望它返回('a',1)
,并且检查最长的匹配可能会给出[('b',2]('b',3])
如果这就是您的意思,那么最简单的方法就是将defaultdict与集合一起使用:
>>> data = defaultdict(set)
>>> data['a'].add(1)
>>> data['b'].add(2)
>>> data['b'].add(3)
>>> min(data.items(), key=lambda x: min(x[1]))
('a': {1})
>>> min(data.items(), key=lambda x: max(len(x[1])))
('b': {2, 3})