Enumerate In Nested For Loop With List Comprehension In Python
I want to create a dictionary mapping all combinations of three groups to an integer. Is it possible to do this in a single line and without using any imports? With itertools it co
Solution 1:
You could enumerate the inner iterator like so:
>>> {x: i for i, x inenumerate(((c, s, z) for c in colours for s in shapes for z in sizes))}
{('red', 'circle', 'small'): 0,
('red', 'circle', 'medium'): 1,
('red', 'circle', 'large'): 2,
('red', 'square', 'small'): 3,
('red', 'square', 'medium'): 4,
('red', 'square', 'large'): 5,
('red', 'triangle', 'small'): 6,
('red', 'triangle', 'medium'): 7,
('red', 'triangle', 'large'): 8,
('green', 'circle', 'small'): 9,
('green', 'circle', 'medium'): 10,
('green', 'circle', 'large'): 11,
('green', 'square', 'small'): 12,
('green', 'square', 'medium'): 13,
('green', 'square', 'large'): 14,
('green', 'triangle', 'small'): 15,
('green', 'triangle', 'medium'): 16,
('green', 'triangle', 'large'): 17,
('blue', 'circle', 'small'): 18,
('blue', 'circle', 'medium'): 19,
('blue', 'circle', 'large'): 20,
('blue', 'square', 'small'): 21,
('blue', 'square', 'medium'): 22,
('blue', 'square', 'large'): 23,
('blue', 'triangle', 'small'): 24,
('blue', 'triangle', 'medium'): 25,
('blue', 'triangle', 'large'): 26}
To make the code slightly more readable:
{
obj: index for index, obj inenumerate(
(
(color, shape, size) for color in colours
for shape in shapes
for size in sizes
)
)
}
Solution 2:
You can try:
lookup = {(c,s,z): i+3*j+9*k for i,c inenumerate(colours) for j,s inenumerate(shapes) for k,z inenumerate(sizes)}
Output:
{
('red', 'circle', 'small'): 0,
('red', 'circle', 'medium'): 9,
('red', 'circle', 'large'): 18,
('red', 'square', 'small'): 3,
('red', 'square', 'medium'): 12,
('red', 'square', 'large'): 21,
('red', 'triangle', 'small'): 6,
('red', 'triangle', 'medium'): 15,
('red', 'triangle', 'large'): 24,
('green', 'circle', 'small'): 1,
('green', 'circle', 'medium'): 10,
('green', 'circle', 'large'): 19,
('green', 'square', 'small'): 4,
('green', 'square', 'medium'): 13,
('green', 'square', 'large'): 22,
('green', 'triangle', 'small'): 7,
('green', 'triangle', 'medium'): 16,
('green', 'triangle', 'large'): 25,
('blue', 'circle', 'small'): 2,
('blue', 'circle', 'medium'): 11,
('blue', 'circle', 'large'): 20,
('blue', 'square', 'small'): 5,
('blue', 'square', 'medium'): 14,
('blue', 'square', 'large'): 23,
('blue', 'triangle', 'small'): 8,
('blue', 'triangle', 'medium'): 17,
('blue', 'triangle', 'large'): 26
}
And then in order to sort dict by value:
lookup=dict(sorted(lookup.items(), key=lambda x: x[1] ))
Post a Comment for "Enumerate In Nested For Loop With List Comprehension In Python"