Ключи с максимальным значением в словаре Python? [Дубликат]

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

{[key: K]: IResources[K]}

используйте это вместо:

{[P in K]: IResources[P]}

На самом деле, это достаточно полезная конструкция, которая существует в стандартная библиотека as Pick:

Pick

Таким образом, ваша функция станет чем-то вроде:

export function mapResources(resources: IResources, keys: K[]): Pick {
  return keys.reduce((response, key) => ({
      ...response,
      [key as string]: resources[key]
  }), {});
}

Это не сможет ввести проверку в реализацию, потому что я не знаю Не думайте, что TypeScript понимает тип распространения на Pick. Если вы уверены, что все в реализации в порядке, вы можете использовать утверждения any, чтобы помочь:

export function mapResources(resources: IResources, keys: K[]): Pick {
  return keys.reduce((response, key) => ({
      ...(response as any),
      [key]: resources[key]
  }), {});
}

Вы можете проверить, что это ведет себя по желанию (я не могу легко это сделать без зная, что IResources). Надеюсь, это поможет; удачи!

5
задан Shoryu 10 September 2014 в 10:51
поделиться

2 ответа

numbers = {'a': 1, 'b': 0, 'c': 1, 'd': 3, 'e': 3}

[k for k,v in numbers.iteritems() if v == max(numbers.values())]

печатает

 ['e', 'd']

, что он делает, перебирает все записи через .iteritems, а затем проверяет, является ли это значение максимальным, и если так, добавьте ключ в список.

7
ответ дан xoryouyou 26 August 2018 в 02:50
поделиться
numbers = {'a': 1, 'b': 4, 'c': 1, 'd':4 , 'e': 3}
mx_tuple = max(numbers.items(),key = lambda x:x[1]) #max function will return a (key,value) tuple of the maximum value from the dictionary
max_list =[i[0] for i in numbers.items() if i[1]==mx_tuple[1]] #my_tuple[1] indicates maximum dictionary items value

print(max_list)

Этот код будет работать в O (n). O (n) в поиске максимального значения и O (n) в понимании списка. Таким образом, в целом он останется O (n).

Примечание: O (2n) эквивалентно O (n).

0
ответ дан Taohidul Islam 26 August 2018 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: