按字典的值排序列表 python
Sort a list by value of a dict 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"]
例如按 dict
的值对列表进行排序
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()。
新答案
- 创建 class
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, "February": 2, "March": 3, "April": 4,
"May": 5,
"June": 6, "July": 7, "August": 8, "September": 9,
"October": 10, "November": 11, "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
测试用例
您编写的测试正在比较 L
和 Expected
。它应该将 actual
与 expected
进行比较。 self.assertEqual(L, expected)
此外,预期 = ["March", "May", "December", "October", "September"]
不正确。应该是 ["March", "May","September", "October", "December"]
import unittest
from selectionSort import selection_sort
# @unittest.skip("")
class TestInPlace(unittest.TestCase):
def test_1(self):
L = ["December", "September", "March", "October", "May"]
obj = selection_sort(L)
actual = obj.get_sorted()
expected = ["March", "May","September", "October", "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)
我需要一些帮助,如何使用算法 选择排序 根据字典的值对列表进行排序。我写了一些代码,但我不知道如何继续,代码是否有效。
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"]
例如按 dict
的值对列表进行排序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()。
新答案
- 创建 class
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, "February": 2, "March": 3, "April": 4,
"May": 5,
"June": 6, "July": 7, "August": 8, "September": 9,
"October": 10, "November": 11, "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
测试用例
您编写的测试正在比较
L
和Expected
。它应该将actual
与expected
进行比较。self.assertEqual(L, expected)
此外,预期 =
["March", "May", "December", "October", "September"]
不正确。应该是["March", "May","September", "October", "December"]
import unittest
from selectionSort import selection_sort
# @unittest.skip("")
class TestInPlace(unittest.TestCase):
def test_1(self):
L = ["December", "September", "March", "October", "May"]
obj = selection_sort(L)
actual = obj.get_sorted()
expected = ["March", "May","September", "October", "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)