Python 如何对列表中给出的词典进行排序

Python 如何对列表中给出的词典进行排序,python,list,function,dictionary,Python,List,Function,Dictionary,我必须写一个函数,让你把一个新行星作为字典添加到列表中。问题是列表必须排序。 例如,对于input:name=Earth来说,输出应该是:{'name':'Earth','density':'123.123'}][{'name':'Mars','density':5.427},{'name':'Venus','density':5.513}, 而不是:[{'name':'Mars','density':5.427},{'name':'Venus','density':5.513},{'name'

我必须写一个函数,让你把一个新行星作为字典添加到列表中。问题是列表必须排序。 例如,对于
input:name=Earth
来说,输出应该是:
{'name':'Earth','density':'123.123'}][{'name':'Mars','density':5.427},{'name':'Venus','density':5.513},
而不是:
[{'name':'Mars','density':5.427},{'name':'Venus','density':5.513},{'name':'Earth','density':'123.123'}]

My code:
base = [
    {"name": "Mars", "density": 5.427},
    {"name": "Venus", "density": 5.513},
]
name = input("Enter the name of the planet: ")
destiny = input("Enter the density of the planet: ")


def addPlanet(name, destiny, base):
    new_planet = {"name": name, "density": destiny}
    base.append(new_planet)
    return base


addPlanet(name, destiny, base)
print(base)
只需在您的
addPlanet()之后添加
base.sort(key=lambda x:x['name'])


顺便说一句,您的函数不必获取并返回
base
,因为它是全局的。

在您的示例中,基本密度有数字(float)。但是,当您插入一个新的时,您并没有将字符串转换为float

因此,它缺少一个
浮动(密度)
或如下所示:

density = float(input("Enter the density of the planet: "))
注意:这是信任用户键入的是数字,而不是名称。换句话说,如果用户键入,例如,
test
,它将生成异常

另外,这不是问题,但是您将变量命名为
destiny
,而不是
density

要按顺序打印,您可以:

# Sort by name
print(sorted(base, key=lambda p: p["name"]))

# Sort by density
print(sorted(base, key=lambda p: p["density"]))
另外,您可以使用一个函数来实现这一点

def sort_by_name(x):
    return x["name"]

def sort_by_density(x):
    return x["density"]

# Sort by name
print(sorted(base, key=sort_by_name))

# Sort by density
print(sorted(base, key=sort_by_density))

您可以这样做,而无需使用排序功能:

def addPlanet(name, destiny, base):
    # Cast to float
    new_planet = {"name": name, "density": float(destiny)}
    index = 0
    # Find where to place the new_planet
    while name > base[index]["name"]:
        index += 1
    # Insert it and move other planets by one
    for i in range(index, len(base)):
        temp = base[i]
        base[i] = new_planet
        new_planet = temp
    # For the last one append to increase the size of the array
    base.append(temp)

根据什么规则排序?根据
名称
值的字母顺序?是的,根据名称可以不使用sort func进行排序吗?您的意思是不使用内置的sort()进行排序吗?是的,不使用sort()和Sorted()进行排序好的,你可以横切你的名单,只要你的名字>当前的名字。然后使用
插入
将你的新名字输入到那个位置!