2

I would like to sort a dictionary by value of specific key ("foo" in the example)

mydict = dict()
mydict["a"] = {"foo": 0.3, "boo": 0.1}
mydict["b"] = {"foo": 0.1, "boo": 0.2}
mydict["c"] = {"foo": 0.8, "boo": 0.3}
mydict["d"] = {"foo": 0.5, "boo": 0.4}
mydict["e"] = {"foo": 0.2, "boo": 0.5}

# sort by "foo" in descending order
# expected result: [{"foo": 0.8, "boo": 0.3}, {"foo": 0.5, "boo": 0.4}, {"foo": 0.3, "boo": 0.1}, {"foo": 0.2, "boo": 0.5}, {"foo": 0.1, "boo": 0.2}]

How can I get the result I want like shown in the comment above?

Zack Lee
  • 2,784
  • 6
  • 35
  • 77

1 Answers1

11
print(sorted(mydict.values(), key=lambda k: k["foo"], reverse=True))

Prints:

[{'foo': 0.8, 'boo': 0.3}, {'foo': 0.5, 'boo': 0.4}, {'foo': 0.3, 'boo': 0.1}, {'foo': 0.2, 'boo': 0.5}, {'foo': 0.1, 'boo': 0.2}]

EDIT: To include "key":

print(
    sorted(
        [{"key": k, **v} for k, v in mydict.items()],
        key=lambda k: k["foo"],
        reverse=True,
    )
)

Prints:

[{'key': 'c', 'foo': 0.8, 'boo': 0.3}, 
 {'key': 'd', 'foo': 0.5, 'boo': 0.4}, 
 {'key': 'a', 'foo': 0.3, 'boo': 0.1}, 
 {'key': 'e', 'foo': 0.2, 'boo': 0.5}, 
 {'key': 'b', 'foo': 0.1, 'boo': 0.2}]
Andrej Kesely
  • 168,389
  • 15
  • 48
  • 91