Функция диапазона в словаре - PullRequest
0 голосов
/ 09 октября 2018

пример из этой диаграммы собаки

Моя цель:

def DogYears():
    small_dog = {
    1 : 15,
    2 : 24,
    3 : 28,
    4 : 32,
    5 : 36
    6 : 40
    .
    .
    .
    }

Мой вопрос заключается в том, как я могу автоматизировать этот процесс, чтобы мне не пришлосьзаполнить это вручную?

Я думал о чем-то вроде этого, по крайней мере, в этом направлении, конечно, это не работает:

def DogYears():
    small_dog = {
    range(15, 80, 4)
    }

Мне так или иначе нужно назначить ключ и значениепара.Есть идеи?

Ответы [ 4 ]

0 голосов
/ 09 октября 2018

Хорошо, исходя из ответа Эдуардо, я думаю, у меня есть уравнение.Вам не нужен словарь:

def small_dog_years(age):
    if age <= 1: return 15
    return min(24 + (age - 2) * 4, 80)

print(small_dog_years(1)) # 15
print(small_dog_years(2)) # 24
print(small_dog_years(3)) # 28
print(small_dog_years(4)) # 32
print(small_dog_years(8)) # 48
print(small_dog_years(15)) # 76

Затем вы можете сгенерировать словарь (если вы все еще хотели) с пониманием слова:

small_dog = {i: small_dog_years(i) for i in range(1, 17)}
print(small_dog)
>>> {1: 15, 2: 24, 3: 28, 4: 32, 5: 36, 6: 40, 7: 44, 8: 48, 9: 52, 10: 56, 11: 60, 12: 64, 13: 68, 14: 72, 15: 76, 16: 80}
0 голосов
/ 09 октября 2018

Использование списка позволяет вам сохранять возрасты в обычном порядке и получать доступ к значениям по их индексу.Поскольку все ваши ключи увеличиваются только на один, то использование списка будет более подходящей структурой данных.Вы можете просто сохранить свой результат range() в переменной списка.Затем, чтобы получить правильный год, вы можете получить возраст, аналогичный тому, который я указывал в функции GetAge, передавая год и список.

def DogYears():
    small_dog = range(15, 80, 4)

def GetAge(year, dog_list):
    index = year - 1
    if index >= 0 and index < len(dog_list):
        return dog_list[index]
0 голосов
/ 09 октября 2018

Вы можете использовать конструктор словаря с диапазонами, включающими человеческие и собачьи годы, вам нужно будет добавить выброс 15, который будет в конце, если вам понадобитсяправильно отсортированный словарь, вы можете просто отсортировать его, используя lambda.Также вам нужно расширить свои диапазоны на 1 единицу, поскольку они не включены.

small_dog = dict(zip(range(2, 17), range(24, 84, 4)))
small_dog[1] = 15
small_dog = dict(sorted(small_dog.items(), key=lambda x: x[0]))
# {1: 15, 2: 24, 3: 28, 4: 32, 5: 36, 6: 40, 7: 44, 8: 48, 9: 52, 10: 56, 11: 60, 12: 64, 13: 68, 14: 72, 15: 76, 16: 80}
0 голосов
/ 09 октября 2018

Если вы хотите создать словарь, достаточно простого for.

   def DogYears():
      small_dog = {}
      small_dog[1] = 15
      i = 2
      for j in range(24, 80, 4):
        small_dog[i] = j
        i = i + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...