Python 排序列表(自己定义的值、其他值)

Python 排序列表(自己定义的值、其他值),python,list,sorting,Python,List,Sorting,我有大量的列表,我知道这些列表将包含几个已知的和几个未知的条目,即不同的条目。现在,我想对列表进行排序,使预期的条目按照预定义的顺序移到开头,而其他条目按照其原始顺序或理想情况下按字母顺序推到末尾 例如,我有如下列表: l1 = ['Agree', 'Neither agree nor disagree', 'some random answer', 'Strongly agree', 'Disagree', 'Strongly disagree'] l2 = ['Agree', '-99',

我有大量的列表,我知道这些列表将包含几个已知的和几个未知的条目,即不同的条目。现在,我想对列表进行排序,使预期的条目按照预定义的顺序移到开头,而其他条目按照其原始顺序或理想情况下按字母顺序推到末尾

例如,我有如下列表:

l1 = ['Agree', 'Neither agree nor disagree', 'some random answer', 'Strongly agree', 'Disagree', 'Strongly disagree']
l2 = ['Agree', '-99', 'Neither agree nor disagree', 'Strongly agree', 'Disagree', 'Strongly disagree']
l3 = ['Other', 'Agree', 'Neither agree nor disagree', 'Strongly agree', 'Disagree', 'Strongly disagree']
l4 = ['Agree', 'Neither agree nor disagree', 'Strongly agree', 'Disagree', 'Strongly disagree', 'Answer declined']
我希望所有列表都以预定义的方式排序:

l_out = ['Strongly agree', 'Agree', 'Neither agree nor disagree', 'Disagree', 'Strongly disagree', 'X', 'Y', 'Z']`
用X、Y和Z替换所有列表中不存在的各种元素

我找不到一个问题来处理这个问题,手动迭代列表似乎太麻烦,不是最有效的解决方案。如果有任何建议,我都会很高兴的-提前谢谢你!:

sorted(list_to_sort, key=ranking_list.index)
其中排名列表包含您希望元素在问题中出现的顺序,即在问题中出现的顺序

您还可以为不在排名列表中的值指定默认行为,但它需要更复杂的键:

rank_list = [...]  # Fill as needed

def rank(e, ranking=rank_list):
    try:
        return ranking.index(e)
    except ValueError:  # e was not in the ranking list
        return len(ranking)

sorted(list_to_sort, key=rank)
其中排名列表包含您希望元素在问题中出现的顺序,即在问题中出现的顺序

您还可以为不在排名列表中的值指定默认行为,但它需要更复杂的键:

rank_list = [...]  # Fill as needed

def rank(e, ranking=rank_list):
    try:
        return ranking.index(e)
    except ValueError:  # e was not in the ranking list
        return len(ranking)

sorted(list_to_sort, key=rank)

你能给每个元素一个权重吗?l1=['Strongly agree',0',agree',1,…]然后您可以按其权重排序。或者,你可以按照你想要的顺序存储列表,这可能是最简单的。只需将列表分成两部分。首先列出您的非值-对它们进行排序。第二个列表,按字母顺序排序。你能给每个元素一个权重吗?l1=['Strongly agree',0',agree',1,…]然后您可以按其权重排序。或者,你可以按照你想要的顺序存储列表,这可能是最简单的。只需将列表分成两部分。首先列出您的非值-对它们进行排序。第二个列表,按字母顺序排序。这非常优雅地处理了非预期条目的问题。非常感谢。这非常巧妙地处理了非预期条目的问题。非常感谢。