微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按字典python的值对列表进行排序

如何解决按字典python的值对列表进行排序

我需要一些帮助,如何使用算法选择排序根据字典的值对列表进行排序。我写了一些代码,但我不知道如何继续,代码工作。

months = {"January": 1,"February": 2,"march": 3,"April": 4,"May": 5,"June": 6,"July": 7,"August": 8,"September": 9,"October": 10,"November": 11,"December": 12}

L = ["march","January","December"]

例如按字典的值对列表进行排序

def month(L):
    for i in months:
       minpos = i
       for j in range (months[i],len(L)):
           if months[L[j]] > months[minpos]:
             months[minpos] = months[L[j]]

       L[j],L[minpos] = L[minpos],L[i] 

return L

解决方法

您的代码:

months = {"January": 1,"February": 2,"March": 3,"April": 4,"May": 5,"June": 6,"July": 7,"August": 8,"September": 9,"October": 10,"November": 11,"December": 12}
L = ["March","January","December"]

将L中的月份名称(str)转换为对应的数字,然后进行排序。

num_L = sorted( [months[month] for month in L] )

将排序后的数字转换为相应的月份名称。

res = [k for number in num_L for k,v in months.items() if number == v]

在匹配月份名称之前,您可能需要一些类似 uppercase() 或 lower() 的字符串操作。

,

新答案

  • 创建具有 selection_sort 方法的类 get_sorted(),该方法将使用选择排序根据字典值对列表进行排序。
  • 这里我们比较两个值,如果第一个值大于第二个,则交换两个值。重复此步骤,直到对整个列表进行排序。

class selection_sort:
    """Sort the list based on dictionary value using selection sort."""
    def __init__(self,L):
        self.months = {"January": 1,"December": 12}
        self.L = L

    def get_sorted(self):
        """ sorting list."""
        month_num =  [self.months[i] for i in self.L]
        flag = True  # set Flag is True to enter the loop.
        while flag:
            flag = False  # set Flag to False for no swaping done

            for i in range(len(month_num)-1):
                if month_num[i] > month_num[i+1]:
                    flag = True  # set Flag to False if no swaping is done
                    # swap
                    month_num[i],month_num[i+1] = month_num[i+1],month_num[i]

        L = [k for k,v in self.months.items() if v in month_num]
        print(L)
        return L

测试用例

  • 您编写的测试是将 LExpected 进行比较。它应该将 actualexpected 进行比较。 self.assertEqual(L,expected)

  • 另外,expected = ["March","May","December","October","September"] 是不正确的。应该是["March","September","December"]

import unittest
from selectionSort import selection_sort

# @unittest.skip("")
class TestInPlace(unittest.TestCase):
    def test_1(self):
        L = ["December","March","May"]
        obj = selection_sort(L)
        actual = obj.get_sorted()
        expected = ["March","December"]
        self.assertEqual(actual,expected)

旧答案

试试这个,

#creating list L1
L1 = [months[L[i]] for i in range(len(L))]
print(L1)

#sorting list using algorithm selection sort
for i in range(1,len(L1)):
    j = 0
    if L1[j] > L1[i] :
        L1[j],L1[i] = L1[i],L1[j]
print(L1)

#Replacing values with key
sorted_list = [ k   for k,v  in months.items() for i in L1 if i == v]
print(sorted_list)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。