That length is right for both vocab and the loglikelihood dictionary, since you get one entry per word in the vocabulary. I added some instrumentation to my code, including showing the computation for one particular word. Check if your values agree:
V = 9165, len(wordlist) 11436
V: 9165, V_pos: 5804, V_neg: 5632, D: 8000, D_pos: 4000, D_neg: 4000, N_pos: 27547, N_neg: 27152
freq_pos for smile = 47
freq_neg for smile = 9
loglikelihood for smile = 1.5577981920239676
0.0
9165