【发布时间】:2015-10-21 06:26:04
【问题描述】:
我有一个字典列表,我希望它们根据作为主键的关键字列表进行排序,否则按字母顺序排列相等的条目。
目前我首先按字母顺序排序,然后根据提供的关键字进行排序,由于使用了稳定的排序算法,这会产生所需的结果。但是,我认为这可以一步完成,但我不知道为什么。有人可以帮忙吗?
其次,我希望能够在关键字排序部分使用关键字而不是完全匹配。我该怎么做?
到目前为止,这是我的代码:
# Define the keywords I want to see first
preferred_projects = ['project one', 'project two', 'project three']
# example data
AllMyProjectsFromaDatasource = [{ 'name': 'project two', 'id': 5, 'otherkey': 'othervalue'},
{ 'name': 'project three', 'id': 1, 'otherkey': 'othervalue'},
{ 'name': 'project one', 'id': 3, 'otherkey': 'othervalue'},
{ 'name': 'abc project', 'id': 6, 'otherkey': 'othervalue'},
{ 'name': 'one project', 'id': 9, 'otherkey': 'othervalue'}
]
def sort_by_preferred(key):
"""Sort lists out by prefered name."""
sortkey = key['name']
return preferred.index(sortkey) if sortkey in preferred else len(preferred)
# First sort alphabetical
AllProjects = sorted(AllMyProjectsFromaDatasource,
key=lambda k: k['name'])
# Then sort by keyword
preferred = preferred_projects
AllProjects.sort(key=sort_by_preferred)
所以实际上我想像这样定义我的“排序过滤器”:
preferred_projects = ['one', 'two', 'three']
然后将列表排序如下:
[{ 'name': 'one project', 'id': 9, 'otherkey': 'othervalue'}
{ 'name': 'project one', 'id': 3, 'otherkey': 'othervalue'},
{ 'name': 'project two', 'id': 5, 'otherkey': 'othervalue'},
{ 'name': 'project three', 'id': 1, 'otherkey': 'othervalue'},
{ 'name': 'abc project', 'id': 6, 'otherkey': 'othervalue'},]
【问题讨论】:
-
你能举一个你的字典的例子吗?
-
从其他解决方案中,我仍然想念我的第二个问题:我只想选择“one”,所以无论哪个项目包含在它的名称“one”中,都将是第一位的。
标签: python sorting dictionary