Q:

Count how many times are items from list 1 in list 2

I have 2 lists:
1. [' a', 'b', 'c']
2. [' a', 'd', 'a', 'b']

And I want dictionary output like this:
{'a': 2, 'b': 1, 'c': 0}

I already made it:
#b = list #1
#words = list #2

c = {}
for i in b:
    c.update({i:words.count(i)})

But it is very slow, I need to process like 10MB txt file. 
EDIT: Entire code, currently testing so unused imports..
import string
import os
import operator
import time
from collections import Counter
def getbookwords():

    a = open("wu.txt", encoding="utf-8")

    b = a.read().replace("\n", "").lower()
    a.close()

    b.translate(string.punctuation)

    b = b.split(" ")
    return b

def wordlist(words):

    a = open("wordlist.txt")
    b = a.read().lower()
    b = b.split("\n")

    a.close()

    t = time.time()
    #c = dict((i, words.count(i)) for i in b )

    c  = Counter(words)
    result = {k: v for k, v in c.items() if k in set(b)}
    print(time.time() - t)

    sorted_d = sorted(c.items(), key=operator.itemgetter(1))    
    return(sorted_d)

print(wordlist(getbookwords()))

A:

Since speed is currently an issue, it might be worth considering not passing through the list for each thing you want to count.  The set() function allows you to only use the unique keys in your list words. 
An important thing to remember for speed in all cases is the line unique_words = set(b).  Without this, an entire pass through your list is being done to create a set from b at every iteration in whichever kind of data structure you happen to use. 
c = {k:0 for k in set(words)}
for w in words:
    c[w] += 1
unique_words = set(b)
c = {k:counts[k] for k in c if k in unique_words}

Alternatively, defaultdicts can be used to eliminate some of the initialization. 
from collections import defaultdict

c = defaultdict(int)
for w in words:
    c[w] += 1
unique_words = set(b)
c = {k:counts[k] for k in c if k in unique_words}

For completeness sake, I do like the Counter based solutions in the other answers (like from Reut Sharabani).  The code is cleaner, and though I haven't benchmarked it I wouldn't be surprised if a built-in counting class is faster than home-rolled solutions with dictionaries. 
from collections import Counter

c = Counter(words)
unique_words = set(b)
c = {k:v for k, v in c.items() if k in unique_words}

A:

@Makalone, above answers are appreciable.  You can also try the below code sample which uses Python's Counter() from collections module.  

You can try it at http://rextester.com/OTYG56015. 

Python code »
from collections import Counter

list1 = ['a', 'b', 'c']
list2 = ['a', 'd', 'a', 'b']
counter = Counter(list2)

d = {key: counter[key] for key in set(list1)}
print(d)

Output »
{'a': 2, 'c': 0, 'b': 1}

