Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Предполагая, что отступ в вашей реальной программе правильный, и что это Python 3.x (поскольку вы, похоже, используете печать как функцию), проблема будет в вашем заявлении лямбда. Очень маленький пример, чтобы показать вашу проблему -
>>> a = lambda (x,y) : x+y
File "<stdin>", line 1
a = lambda (x,y) : x+y
^
SyntaxError: invalid syntax
В Python 3.x, tuples
не может быть частью синтаксиса параметра lambda, то есть вы не можете напрямую распаковать элемент в несколько аргументов (как может быть сделано в Python 2.x). Вместо этого вам нужно будет использовать одну переменную, а затем получить доступ к каждому элементу кортежа, используя индекс. Пример -
print("The Overall Winner is,", sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True),sum(event[1] for event in event_data))
Кроме того, это кажется мне нечитаемым, вам следует разбить его на несколько строк (возможно, за исключением промежуточных результатов в разных переменных перед печатью, это было бы более читаемым).
Как вы говорите в комментариях -
Например, на этом рисунке мне нужна самая высокая строка с общим количеством точек, которые будут напечатаны, как показано в picture.
blockquote>Если вам нужен элемент с наивысшим значением, тогда возьмите первый элемент, и поскольку элементы вашего массива снова будут списками, используйте индекс, чтобы получить его имя. Пример -
print("The Overall Winner is,", sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True)[0][0],sum(event[1] for event in event_data))
Для получения последних требований в соответствии с комментариями сделайте -
sortedlist = sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True) print("The Overall Winner is,", sortedlist[0][0], sum(n[1] for n in sortedlist[0][1]))
Ваша проблема в том, что вы используете распаковку аргументов в лямбда при использовании Python 3. Вместо этого:
lambda(x,y): sum(n[1] for n in y)
Сделайте это:
lambda item: sum(n[1] for n in item[1])
key=lambda item: sum(n[1] for n in item[1]
. Обратите внимание на `key = ... '.
– Cyphase
26 August 2015 в 04:32