如何使用Python中的排序算法对列表字典进行排序?

2024-04-28 16:39:57 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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]
 }

Tags: 函数算法元素列表字典排序countrychina
2条回答

基本上,您所做的是将值重新分配给键。您可以先对键列表进行排序,然后将它们与值一起插入到有序的dict中

key_list =sorted(d.keys()) # use any function to sort keys 
d= dict(zip(key_list, [d[i] for i in key_list ]))

Python字典是根据插入顺序排序的,因此交换字典条目(如列表)可能不是您想要的。相反,我会对键进行排序,然后通过将排序后的键与其原始值关联来创建一个新字典

def bubbleDecDic(dictio):
    end = len(dictio)
    countries = list(dictio)
    for i in range(end-1,0,-1):
        for j in range(i):
            if dictio[countries[j]] < dictio[countries[j + 1]]:
                countries[j + 1], countries[j] = countries[j], countries[j + 1]
    return {country: dictio[country] for country in countries}

(我没有测试它,但它基本上与您给出的算法相同,只是它改变了国家列表,而不是dictio。)

相关问题 更多 >