2016-07-07 3 views
1

Возможно ли получить значение из словарной статьи в том же словаре? Я хотел бы создать список каталогов, в то время как ссылки на ранее добавленные каталоги ..Ссылка на словарь внутри себя

common_dirs = { 
    'root': '/var/tmp', 
    'java_path': os.path.join(dict.get('root'), 'java'), 
    'application_path': os.path.join(dict.get('java_path'), 'my_app') 
} 
+0

Instant -2 .. ?? Это действительно настолько плохо ? – AK47

+0

Ну, во-первых, вы затеняете встроенное имя здесь. И два, нет, вы не можете, потому что имя не существует, пока оно не создано. –

+2

Вы уже знаете, что это ''/var/tmp'' – DeepSpace

ответ

4

Почему бы не обновить словарь:

my_dict = {'root': '/var/tmp'} 
my_dict.update({'file': os.path.join(my_dict.get('root'), 'file')}) 

Не используйте dict как имя. Возможно, вам понадобится настоящая версия dict.

+2

Зачем использовать обновление? Просто сделайте 'my_dict ['file'] = os.path.join (my_dict.get ('root'), 'file')' –

+2

@MorganThrapp. То же самое. Мне просто нужен мой подход к совпадению вопроса OP, используя как можно больше '{}' :) –

0

Вы также можете попробовать использовать класс вместо словаря:

import os 

class Paths: 
    def __init__(self, root, filename): 
     self.root = root 
     self.file = os.path.join(self.root, filename) 

root = '/var/tmp' 
filename = 'file' 

p = Paths(root, filename) 
print(p.file) 
# /var/tmp/file 
+0

Это какой-то сумасшедший перебор, и он может потенциально сломаться, если остальной код OP ожидает словарь. –

+0

@MorganThrapp Вероятно, но это не означает, что они не могут быть переданы динамически, если предположить, что это минимальный проверяемый пример. – Alec

+1

@MorganThrapp Достаточно честно, я отредактировал ответ, чтобы показать это. Я согласен с тем, что класс, по всей вероятности, слишком переполнен! – Alec

1

No. В тот момент, когда вы заполняете в словаре инициализаторе, словарь не существует, так что вы не можете ссылаться на него!

Но в принципе нет причин, по которым словарь не может содержать себя как одно из значений, как объясняют другие ответы, но вы просто не можете ссылаться на него в своем собственном инициализаторе {}.

Смежные вопросы