Я выполнял некоторые упражнения из раздела «Словарь» во время второй недели моего буткемпа по программированию. Каким бы банальным это ни казалось, заданный вопрос привел меня к поиску в Google. К моему удивлению, результаты первой страницы Google не давали красивого решения, как обычно. Поэтому я попробовал несколько зацепок, которые смог найти, и подумал, что это может стоить 2-минутного чтения для других студентов, которые могут столкнуться с тем же вопросом.

Вот простая задача:

  1. Создайте несколько словарей домашних животных с именами домашних животных в качестве имени для каждого словаря.
  2. Храните эти словари в списке под названием «pets».
  3. Распечатайте все о каждом питомце.

Я хотел напечатать такое предложение: Лила — собака, принадлежащая Саре. Итак, мне нужно имя словаря «lila» в строковом формате. К сожалению, печать элементов в pets дала мне только детали словаря.

$ print(pets[3])
$ {‘kind’: ‘dog’, ‘owner’: ‘sarah’}

Да, конечно. Потому что я только что назвал словарь "lila" и поместил эту переменную в список под названием pets. Более того, методы items(), .keys() и .values() предоставляют только информацию о ключах и значениях словаря, а не рассказывая мне, как это называется.

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

['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'babe', 'coco', 'lady', 'lila', 'pets']

Чудесно! Теперь у меня есть все имена питомцев в строковом формате. Помимо всех имен методов dunder, мне нужно только исключить 'pets' из списка собранных строк.Затем я должен отсортировать имена, чтобы они могли совпадать с элементами. в моем списке домашних животных, который уже был в порядке.

Это отлично сработало для этой конкретной проблемы. Однако это не стабильный метод. Представьте, что у меня есть большой файл с тысячами переменных, и я никак не могу узнать соглашение об именах моих словарей. Может быть очень сложно идентифицировать имена только для словарей или любых других типов, не говоря уже о том, чтобы расположить их в определенном порядке.

В конце концов, самый очевидный ответ на этот квест — добавить имя каждого питомца в его словарь, например:

$ {‘kind’: ‘dog’, ‘owner’: ‘sarah’, ‘name’: ‘lila’}

Написав еще одну пару ключ-значение, мы можем просто получить доступ к этой информации, используя обычные методы, предусмотренные для словарей. Вероятно, в любом случае мы должны использовать словарь именно так.

Тем не менее, мне все еще любопытно, есть ли надежный метод для этого. Если у вас есть более стабильные, элегантные и универсальные решения, свяжитесь со мной!