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()进行排序好的,你可以横切你的名单,只要你的名字>当前的名字。然后使用插入将你的新名字输入到那个位置!