首先根据值搜索Python字典,以获得关键输出对我有意义。但是如果我们想在搜索中添加另一个约束呢?
例如,我在这里搜索最低值的字典(多维),然后返回该最低值的键:
minValue[id] = min(data[id].items(), key=lambda x: x[1])
由于此方法只返回一个与该值匹配的键,而可能有多个,我想添加另一个约束。
是否有一种优雅的添加方式:返回键包含总体最小值并且具有最长匹配的长度?
答案 0 :(得分: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)
但如果有两个具有相同的值和相同的长度怎么办?你又回到了不知道输出是什么的同样问题。我可能会建立一个匹配键值对的列表,然后对它们进行排序,但正确的做法可能取决于键实际意味着什么。
答案 1 :(得分: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})