Speed up two for-loops?
Perhaps,

for val in dict1.itervalues():
    if val in dict2:
       list_needed.append([val,dict2[val]])


This is similar to 

list_needed = [[val,dict2[val]] for val in dict1.itervalues() if val in dict2]


My preference would be to make [val,v] a tuple - i.e (val,v) which is an immutable D.S and hence would be faster than a list. But it may not count for much.