If you want a specific order, you can do this as the input to the dict, if you do it indirectly as a generator expression to OrderedDict
:
MAXELEMENT = 8
ElementalSymbols = ['H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O']
ElementalWeights = [1.00794, 4.002602, 6.941, 9.012182, 10.811, 12.0107, 14.0067, 15.9994];
ElementDict= OrderedDict(zip(ElementalSymbols, zip(range(0, MAXELEMENT), ElementalWeights)))
NewOrder = ['Be', 'C', 'H']
BlueMonday = OrderedDict((x, ElementDict[x]) for x in NewOrder)
print BlueMonday
OrderedDict([('Be', (3, 9.012182)), ('C', (5, 12.0107)), ('H', (0, 1.00794))])
print BlueMonday.items()
[('Be', (3, 9.012182)), ('C', (5, 12.0107)), ('H', (0, 1.00794))]
That's similar to what you are already doing, but maybe a little less kludgy?