python and list/dict comprehension -
i'm learning list/dict comprehension , i'm stuck!!!
i don't understand following...
i have program:
def histogram_for(word): adict = dict() c in word: adict[c] = adict.get(c, 0) + 1 print adict return adict def histogram_dc(word): adict = dict() adict = {c: (adict.get(c, 0) + 1) c in word} print adict return adict def histogram_lc(word): adict = dict() adict = dict([(c, (adict.get(c, 0) + 1)) c in word]) print adict return adict word = "football" histogram_for(word.lower()) histogram_dc(word.lower()) histogram_lc(word.lower())
and these results:
{'a': 1, 'b': 1, 'f': 1, 'l': 2, 'o': 2, 't': 1} {'a': 1, 'b': 1, 'f': 1, 'l': 1, 'o': 1, 't': 1} {'a': 1, 'b': 1, 'f': 1, 'l': 1, 'o': 1, 't': 1}
why working 1 "for" method?
quite because while processing happening in _dc
, _lc
adict
empty, while in _for
it's being updated on each turn of for
loop. comprehension can de-sugared for
loop of own:
adict = dict() adict = {c: (adict.get(c, 0) + 1) c in word}
becomes:
adict = dict() # handwaving python $newdict = {} c in word: $newdict[c] = adict.get(c, 0) + 1 adict = $newdict
use collections.counter
(or for-loop version) if need keep track of set of keys , counts of occurrences.
Comments
Post a Comment