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

2024-05-19 20:27:32 发布

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

我必须写一个函数,让你把一个新行星作为字典添加到列表中。问题是列表必须排序。 例如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)

Tags: ofthename列表newinputbasedensity
3条回答

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

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)

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

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

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

因此,它缺少一个float(density)或如下所示:

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))

相关问题 更多 >