#python #list #function #dictionary
#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)
Комментарии:
1. Сортируется в соответствии с каким правилом?
2. Алфавитный порядок
3. В соответствии со
name
значениями?4. Да, в соответствии с именем
Ответ №1:
просто добавьте base.sort(key=lambda x: x['name'])
после вашего addPlanet()
.
Кстати, ваша функция не должна получать и возвращать base
, поскольку она является глобальной.
Комментарии:
1. Можно ли это сделать без использования функции сортировки?
2. вы имеете в виду сортировку без использования встроенной функции сортировки ()?
3. Да, без сортировки () и сортировки ()
4. ну, вы можете пересечь свой список, если ваше имя> current_name . а затем используйте
insert
для ввода вашего нового dict в эту позицию5. Лиор ата ах якар!
Ответ №2:
Вы можете сделать это так, без функции сортировки:
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)
Ответ №3:
В вашем примере у вас есть числа (с плавающей запятой) для базовых плотностей. Но, когда вы вставляете новый, вы не преобразуете строку в 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))