EDIT:
I’m editing the whole post as it wasn’t as clear as I thougt.
I have this dictionary (list of dictionaries within a dictionary) and I need to sort it by the values of "Position"
and "Team"
, meaning that I need to get all the values from those two keys and print them as I show below. I know how to get each value, but I don’t know how to get them and sort them.
dic = {"Racing" : [ {"Team" : "Racing", "Player" : "Player 1", "Position" : "GK" }, {"Team" : "Racing", "Player" : "Player 2", "Position" : "DF"} ], "Independiente" : [ {"Team" : "Independiente", "Player" : "Player A", "Position" : "GK"}, {"Team" : "Independiente", "Player" : "Player B", "Position" : "DF"} ] }
I tried this piece of code, but I still can’t get it to work.
{k: v for k, v in sorted(dic.items(), key=lambda item: (item[1][2], item[1][0]))}
My actual dictionary is much bigger than this one, and I pretend to make it even bigger. I need the output to be something like:
DF - Independiente DF - Racing GK - Independiente GK - Racing
In this example I only included strings, but I need to also sort similar dictionaries by integer values.
Advertisement
Answer
Extract values of dic as tuple of (Position, Team)
,
Concatenate them to create flattened tuple of (Position, Team)
elements.
Sort them with sorted
dic = {"Racing" : [ {"Team" : "Racing", "Player" : "Player 1", "Position" : "GK" }, {"Team" : "Racing", "Player" : "Player 2", "Position" : "DF"} ], "Independiente" : [ {"Team" : "Independiente", "Player" : "Player A", "Position" : "GK"}, {"Team" : "Independiente", "Player" : "Player B", "Position" : "DF"} ] } res = () # emit as tuple of (Position, Team) from all of dic's values for PT in ( tuple((team['Position'], team['Team']) for team in v) for v in dic.values() ): res = res + PT # concatenate all tuples to flatten into one large tuple res = sorted(res) # sort tuple of (Position, Team) values print(res) # create string representation in format "Position - Teamn..." print("n".join(" - ".join(r) for r in res))