Issue
This Content is from Stack Overflow. Question asked by coder_noob
I have several dictionary
{
('ABD12-GOU10', 'ASS 4W LINE 3'):[15,5],
('ABD13-GOU11', 'ASS 4W LINE 1'):[7,5],
('ABD13-GOU11', 'ASS 4W LINE 1'):[22,5],
('ABD14-GOU13', 'ASS 4W LINE 1'):[12,5],
('ABD14-GOU19', 'ASS 4W LINE 2'):[4,5],
('ABD14-GOU10', 'ASS 4W LINE 3'):[2,5],
('ABD14-GOU13', 'ASS 4W LINE 4'):[18,5],
('ABD14-GOU12', 'ASS 4W LINE 5'):[9,5],
('ABD14-GOU11', 'ASS 4W LINE 6'):[3,5],
}
How to grouping by key 2 ex: ASS 4W LINE 1 and order by key 1 ex: ABD12-GOu10. I want like this:
{
('ABD13-GOU11', 'ASS 4W LINE 1'):[7,5],
('ABD13-GOU11', 'ASS 4W LINE 1'):[22,5],
('ABD14-GOU13', 'ASS 4W LINE 1'):[12,5],
('ABD14-GOU19', 'ASS 4W LINE 2'):[4,5],
('ABD12-GOU10', 'ASS 4W LINE 3'):[15,5],
('ABD14-GOU10', 'ASS 4W LINE 3'):[2,5],
('ABD14-GOU13', 'ASS 4W LINE 4'):[18,5],
('ABD14-GOU12', 'ASS 4W LINE 5'):[9,5],
('ABD14-GOU11', 'ASS 4W LINE 6'):[3,5],
}
Solution
Keep in mind that Python dict
keep order since Python 3.6
only
I use numpy
for argsorting, but you can use anything
You can do:
import numpy as np
keys = list(D.keys())
sorted_D = {
keys[i]: D[keys[i]] for i in np.argsort([k[1] for k in keys])
}
output:
{('ABD13-GOU11', 'ASS 4W LINE 1'): [22, 5],
('ABD14-GOU13', 'ASS 4W LINE 1'): [12, 5],
('ABD14-GOU19', 'ASS 4W LINE 2'): [4, 5],
('ABD12-GOU10', 'ASS 4W LINE 3'): [15, 5],
('ABD14-GOU10', 'ASS 4W LINE 3'): [2, 5],
('ABD14-GOU13', 'ASS 4W LINE 4'): [18, 5],
('ABD14-GOU12', 'ASS 4W LINE 5'): [9, 5],
('ABD14-GOU11', 'ASS 4W LINE 6'): [3, 5]}
However, this will only sort on index 1 of the key, so it might have different behaviours on dictionary with keys with same index 1 value.
EDIT:
As said in a comment, your original dictionary has identical keys, so the output above has not the same number of values
This Question was asked in StackOverflow by coder_noob and Answered by PlainRavioli It is licensed under the terms of CC BY-SA 2.5. - CC BY-SA 3.0. - CC BY-SA 4.0.