Python 字典列表,根据字段字段进行排序。

对字典列表进行排序

from operator import itemgetter

# 有如下一个列表,我们需要给其中的字典进行排序,比如根据uid排序
rows = [
    {'name': 'Brian', 'id': 1003},
    {'name': 'David', 'id': 1002},
    {'name': 'John', 'id': 1001},
    {'name': 'Big', 'id': 1004},
    {'name': 'Ag', 'id': 1004}
]


# 改变当前列表
# rows.sort(key = lambda r:r.get("uid"))
# print(rows)

# 新建列表
# rows_by_id = sorted(rows,key = lambda r:r.get("id"))
# print(rows_by_id)

# 使用lambda 根据id和name进行排序
# rows_by_id_name = sorted(rows, key=lambda r: (r['id'],r['name']))
# print(rows_by_id_name)


# 使用operator中的itemgetter,根据id排序
# rows_by_id = sorted(rows, key=itemgetter('id'))
# print(rows_by_id )


根据id和name排序
rows_by_id_name = sorted(rows, key=itemgetter('id','name'))
print(rows_by_id_name)

如果排序的不是列表中元素不是字典,而是一个自定义对象,根据对象的属性进行排序,同理。
使用 operator .attrgetter

from operator import attrgetter

class User:
    def __init__(self, user_id):
        self.user_id = user_id
    def __repr__(self):
        return 'User({})'.format(self.user_id)

def sort_notcompare():
    users = [User(23), User(3), User(99)]
    
    # print(users)
    # print(sorted(users, key=lambda u: u.user_id))

    print(users)
    print(sorted(users, key=attrgetter('user_id')))


if __name__ == "__main__":
    sort_notcompare()
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页