in teoria questo codice fa quello che vuoi, ma in pratica, mi sa che i dizionari vengono ordinati secondo interni...
io userei una lista di tuple.

def OrdinaDiz2(diz, debug = 0):
if(debug):
print diz
diz2 = {}
b = diz.items()
if(debug):
print b
b.sort(lambda a,b:int(b[1])-int(a[1]))
if(debug):
print b
for i in b:
diz2[i[0]] = i[1]
if(debug):
print i, i[0], i[1]
print diz2
return diz2

OrdinaDiz2({'val':'15', 'mar':'5', 'aug':'3', 'cavolo':'852', 'scemo':'0'}, 1)

########## Output ##############
{'cavolo': '852', 'mar': '5', 'aug': '3', 'val': '15', 'scemo': '0'}
[('cavolo', '852'), ('mar', '5'), ('aug', '3'), ('val', '15'), ('scemo', '0')]
[('cavolo', '852'), ('val', '15'), ('mar', '5'), ('aug', '3'), ('scemo', '0')]
('cavolo', '852') cavolo 852
('val', '15') val 15
('mar', '5') mar 5
('aug', '3') aug 3
('scemo', '0') scemo 0
{'cavolo': '852', 'mar': '5', 'aug': '3', 'val': '15', 'scemo': '0'}
{'cavolo': '852', 'mar': '5', 'aug': '3', 'val': '15', 'scemo': '0'}