Python словарь получить метод в назначении - PullRequest
4 голосов
/ 19 августа 2011

Все,

Я перебираю словарь и подсчитываю возникающие значения.Для этого я использую метод get в операторе присваивания для другого словаря.Это возвращает синтаксическую ошибку «невозможно присвоить вызову функции»

counts = {}
mydict = {'a':[1,2,5], 'b': [1,2,10]}
for key,value in mydict.iteritems():
    counts(value[1]) = counts.get(value[1], 0) + 1

Почему присвоение пытается указывать на функцию, а не на возвращаемое значение?

Ответы [ 4 ]

2 голосов
/ 19 августа 2011
counts = {}
mydict = {'a':[1,2,5], 'b': [1,2,10]}
for key,value in mydict.iteritems():
    counts[value[1]] = counts.get(value[1], 0) + 1

Вам нужны скобки, а не скобки, чтобы получить элемент из словаря.

Кроме того, вы делаете это трудным путем.

from collections import defaultdict

# automatically start each count at zero
counts = defaultdict(int)
# we only need the values, not the keys
for value in mydict.itervalues(): 
    # add one to the count for this item
    counts[value[1]] += 1

или

# only on Python 2.7 or newer
from collections import Counter

counts = Counter(value[1] for value in mydict.itervalues())
1 голос
/ 19 августа 2011

Вместо counts(value[1]) = ... вы хотите counts[value[1]] = ....

0 голосов
/ 19 августа 2011
counts[value[1]] = counts.get(value[1], 0) + 1

должно быть

counts[value[1]] = counts.get(value[1], 0) + 1
0 голосов
/ 19 августа 2011

Измените это:

counts(value[1])

на это:

counts[value[1]]

Код выглядит следующим образом:

counts = {}
mydict = {'a':[1,2,5], 'b': [1,2,10]}
for key, value in mydict.iteritems():
    counts[value[1]] = counts.get(value[1], 0) + 1
...