Python3之字典生成器结合lambda实现按key/value排序
1、先介绍不常见的字典按value排序:
dict1 = {"g": 2, "f": 1, "a": 6}
print(dict1.values())
d1 = sorted(dict1.items(), key=lambda d: d[1], reverse=True) # 按字典values倒序排序
d2 = sorted(dict1.items(), key=lambda d: d[1]) # # 按字典values正序排序
print(d1)
print(d2)
输出:
[('a', 6), ('g', 2), ('f', 1)]
[('f', 1), ('g', 2), ('a', 6)]
解释:d[1]表示按字典的value排序,若是0则按字典的key排序(文末有示例),大概的意思就是相当于for遍历dict1.items(),那么每次遍历key是第一个(索引0),value是第二个(索引1)。
然后这里返回的是列表,列表中包含多个元组
2、如果想返回字典,可以借用字典生成器:
dict1 = {"g": 2, "f": 1, "a": 6}
d1 = {i[0]: i[1] for i in sorted(dict1.items(), key=lambda d: d[1])}
输出:
{'f': 1, 'g': 2, 'a': 6}
解释:
sorted(dict1.items(), key=lambda d: d[1])
还是跟上面一样,只是多了个字典生成器,它跟列表生成式差不多,i[0]是key,而i[1]是value
3、如果要按key排序
将标号1中d[1]改为d[0]即可:
dict1 = {"g": 2, "f": 1, "a": 6}
d1 = {i[0]: i[1] for i in sorted(dict1.items(), key=lambda d: d[0])}
print(d1)
out:
{'a': 6, 'f': 1, 'g': 2}