Возвращаемое значение соответствия ключа - Добавление ограничения - PullRequest
0 голосов
/ 20 марта 2012

Поиск словаря Python по значению сначала, чтобы получить вывод ключа, имеет смысл для меня. Но что, если мы хотим добавить еще одно ограничение к поиску?

Например, здесь я ищу словарь (многомерный) для наименьшего значения, а затем возвращаю ключ этого наименьшего значения:

minValue[id] = min(data[id].items(), key=lambda x: x[1])

Поскольку этот метод возвращает только один ключ, который соответствует этому значению, хотя их может быть несколько, я хочу добавить еще одно ограничение.

Существует ли элегантный способ добавить: ключ возврата, который содержит общее минимальное значение И имеет самую длинную длину из соответствующих?

Ответы [ 2 ]

1 голос
/ 20 марта 2012

Я думаю, что конкретный пример был бы полезен для пояснения того, как выглядит словарь, поскольку python напрямую не обеспечивает многомерный диалог.

Я предполагаю, что это выглядит примерно так: 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})
1 голос
/ 20 марта 2012

Ну, вы можете добавить длину к ключевой функции:

>>> 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)

а что, если есть два с одинаковым значением и одинаковой длиной? Вы вернулись к той же проблеме, не зная, какой будет результат. Возможно, я бы составил список соответствующих пар ключ-значение, а затем отсортировал их или что-то в этом роде, но правильные действия, вероятно, будут зависеть от того, что на самом деле означают ключи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...