Bare bone implementation of Dijkstra
for key in graph.keys():
        dist[key] = 1000



Why 1000? There are two values which are easy to defend here: positive infinity (which is the value that an algorithms textbook would use), or half the maximum value of the datatype (to avoid overflow when adding two weights). Even the second one of those requires a comment to justify it.


        prev[key] = ""



Why not just leave it undefined?


        Q.append(key)



What is the purpose of Q? It just seems to duplicate dist.keys().




    #I had to have another distance data structure dst
    # to store all the distance covered



Why? It's not used anywhere that I can see.




        # Here I get the minimum distance
        u = min(dist, key = dist.get)



Hopefully you can see that this is quite inefficient, and that's the motivation for using more sophisticated data structures.




            #I also want to improvise this condition block
            #It is because of 't': {'': None} 
            if graph[u][v] is None:
                continue



Why is it not just 't': {}?