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))