Более элегантное решение для поиска ключа для максимального значения в словаре значений degree centrality networkx?

#python #dictionary #list-comprehension #networkx

#python #словарь #список-понимание #networkx

Вопрос:

У меня есть словарь значений degree centrality с ключами, deg_c:

 {1: 0.026501766784452298,
2: 0.020318021201413426,
3: 0.03356890459363958,
4: 0.019434628975265017,
5: 0.0088339222614841,
...}
 

и я нашел ключ для максимального значения следующим образом

 def f1():       
   deg_c = nx.degree_centrality(G1)
   degree_value = max([v for k,v in deg_c.items()])
   degree_node = [k for k,v in deg_c.items() if v == degree_value]
   return degree_node[0]
 

он возвращает ключ 105 из кортежа (105, 0.0636042402826855).

однако здесь я дважды использую понимание списка. как я могу записать это в одну строку? должен быть лучший способ .. спасибо. : o)

Ответ №1:

Используйте ключевой аргумент max .

 max(my_dict.items(), key=lambda x: x[1])[0]
 

И чтобы ускорить это, вы можете использовать operator.itemgetter

 from operator import itemgetter

max(my_dict.items(), key=itemgetter(1))[0]
 

Комментарии:

1. @DavidFelipeMedinaMayorga — эти ответы были опубликованы примерно в одно и то же время. Ваш не прав … iteritems предназначен для python 2 — и у этого есть два варианта. Итак, они не совпадают.

2. как интересно, я не знал о itemgetter() . спасибо, Jab!