【问题标题】:Sorting a list according to a dictionary (beginner)根据字典排序列表(初学者)
【发布时间】:2020-06-28 06:32:43
【问题描述】:

我有以下清单:

listofanimals = ['Dog', 'Cat', 'Frog', 'Tiger', 'Sheep', 'Lion']

我想根据字典对这个列表进行排序:

score_card = {0: 'Sheep', 1: 'Dog', 2: 'Cat', 3: 'Tiger', 4: 'Frog', 5: 'Lion'}

最终列表的顺序必须是从 0 到 5,即

numberorder = [0, 1, 2, 3, 4, 5]

我想在一个函数中创建它。这就是我所拥有的:

def sorter():
    listofanimals = ['Dog', 'Cat', 'Frog', 'Tiger', 'Sheep', 'Lion']
    score_card = {0: 'Sheep', 1: 'Dog', 2: 'Cat', 3: 'Tiger', 4: 'Frog', 5: 'Lion'} 
    numbers = [0, 1, 2, 3, 4, 5]
    finallist = []
    for i in listofanimals:
        print(numbers[listofanimals.index(i)])
        q.append(numbers[listofanimals.index(i)])
    print(q)
    q = sorted(q)
    finallist = [score_card[j] for j in q]
    return finallist

我不知道如何将动物列表转换为数字,所以我可以对数字进行排序,然后反馈到字典中以获取值,但我就是无法让它工作。任何帮助表示赞赏。

【问题讨论】:

    标签: python python-3.x string list dictionary


    【解决方案1】:

    反转你的字典

    data = {'Sheep':0, 'Dog':1,  'Cat':2, 'Tiger': 3, 'Frog':4, 'Lion':5} 
    

    (如果需要,您可以通过编程方式反转它,查看其他答案)

    现在你可以简单地

    my_sorted_list = sorted(my_list,key = data.get)
    

    【讨论】:

      【解决方案2】:
      listofanimals = ['Dog', 'Cat', 'Frog', 'Tiger', 'Sheep', 'Lion']
      score_card = {0: 'Sheep', 1: 'Dog', 2: 'Cat', 3: 'Tiger', 4: 'Frog', 5: 'Lion'}
      inverted_score_card = {v: k for k, v in score_card.items()}
      
      sorted_list = sorted(listofanimals, key=inverted_score_card.__getitem__)
      print(sorted_list)
      

      输出:

      ['Sheep', 'Dog', 'Cat', 'Tiger', 'Frog', 'Lion']
      

      【讨论】:

        【解决方案3】:

        您可以反转score_card 字典以简化操作。

        score_card = {0: 'Sheep', 1: 'Dog', 2: 'Cat', 3: 'Tiger', 4: 'Frog', 5: 'Lion'}
        score_card={v:k for k,v in score_card.items()}
        # {'Sheep':0, 'Dog':1,  'Cat':2, 'Tiger': 3, 'Frog':4, 'Lion':5} 
        
        sorted(listofanimals,key=lambda x:score_card[x])
        # ['Sheep', 'Dog', 'Cat', 'Tiger', 'Frog', 'Lion']
        

        如果你不想使用lambda,你可以使用itemgetter

        【讨论】:

          【解决方案4】:
          sorted_dictionary = dict(sorted(score_card.items()))
          sorted = []
          for key, value in sorted_dictionary.items():
              for item in listofanimals:
                  if value == item:
                      sorted.insert(key, item)
          

          输出:

          ['Sheep', 'Dog', 'Cat', 'Tiger', 'Frog', 'Lion']
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-06-14
            • 1970-01-01
            • 1970-01-01
            • 2015-11-23
            • 1970-01-01
            • 2018-09-27
            • 1970-01-01
            相关资源
            最近更新 更多