使用Python中的排序算法对列表字典进行排序
我试图在不使用Python中现有的固定函数和方法(即sorted()和.sort())的情况下对列表字典进行排序(降序)
我使用冒泡排序算法创建了一个函数。 但是,它正在对元素进行排序,但键不会与其对应的元素一起移动
以下是函数:
def bubbleDecDic(dictio):
end=len(dictio)
ndictio=dictio
country=list(dictio.keys())
for i in range(end-1,0,-1):
for j in range(i):
if ndictio[country[j]]< ndictio[country[j+1]]:
ndictio[country[j+1]], ndictio[country[j]]= ndictio[country[j]], ndictio[country[j+1]]
return ndictio
以下是输入字典的示例:
swim={'Russia': [0, 1, 1], 'China': [1, 2, 0], 'Australia': [1, 0, 0], 'Cuba': [1, 0, 0], 'Canada': [2, 1, 0]}
# input dictionary
# Country: [ gold, silver, bronze]
# gold > silver > bronze
{'Russia': [0, 1, 1],
'China': [1, 2, 0],
'Australia': [1, 0, 0],
'Cuba': [1, 0, 0],
'Canada': [2, 1, 0]}
bubbleDecDic(swim)
输出将键保持在相同的位置,并对元素进行排序:
{'Russia': [2, 1, 0],
'China': [1, 2, 0],
'Australia': [1, 0, 0],
'Cuba': [1, 0, 0],
'Canada': [0, 1, 1]}
我的目标是按元素排序,但键应该放在一起
这是我试图获得的输出:
{'Canada': [2, 1, 0],
'China': [1, 2, 0],
'Australia': [1, 0, 0],
'Cuba': [1, 0, 0],
'Russia': [0, 1, 1]
}
基本上,您所做的是将值重新分配给键。您可以先对键列表进行排序,然后将它们与值一起插入到有序的dict中
Python字典是根据插入顺序排序的,因此交换字典条目(如列表)可能不是您想要的。相反,我会对键进行排序,然后通过将排序后的键与其原始值关联来创建一个新字典
(我没有测试它,但它基本上与您给出的算法相同,只是它改变了国家列表,而不是
dictio
。)相关问题 更多 >
编程相关推荐