What is happening is that map variables are references in Python. So in each iteration if the loop you are modifying all M2Mldic2 maps because they are all the same.
I think your code should be:
#global M2Mdic
global M2Mldic2
M2Mdic = {}
M2Mldic2 = {}
res = {}
for x in self.pendingapr:
M2Mdic = {}
M2Mdic['itemdescription'] = str(x.itemdescription)
M2Mldic2[x.id] = M2Mdic