Я изучаю Python всего несколько недель, поэтому, пожалуйста, потерпите меня.

Я создал набор словарей и хотел бы, чтобы пользователь мог искать имя одного (через Input), а затем Print весь словарь.

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

DICT001 = {
     'MAP' : 'XXXX',
     'SSC'   : '0333',
     'Method': 'R',
     'Code1': 'S093733736',
     'Reg ID'  : '01'
}

DICT002 = {
     'MAP' : 'XXXX',
     'SSC'   : '0333',
     'Method': 'H',
     'Code1': 'B19SN99854',
     'Reg ID'  : 'S'
}

Search = input("Enter Dictionary to Search:")

print (Search)

Я полностью понимаю, почему приведенный выше код не работает вообще, он просто печатает переменную поиска, которую я создал ... Однако я нигде не могу найти обходной путь для этого.

Любая помощь будет принята с благодарностью!

0
PyPat848 2 Май 2019 в 12:49

3 ответа

Лучший ответ

Краткий ответ .

c = "DICT001"
tmp_dict = globals().get(c, None)
print(tmp_dict if tmp_dict else "There's no variable \"{}\"".format(c))

Расширенный ответ.

Да, есть несколько способов, как получить значение переменной по ее строковому имени, НО факт, что это обычно требуется, является маркером плохого кода.

Обычным способом хранения таких данных будет вложенный словарь .

Пример:

dictionaries = {
    "DICT001": {
         'MAP' : 'XXXX',
         'SSC'   : '0333',
         'Method': 'R',
         'Code1': 'S093733736',
         'Reg ID'  : '01'
    },
    "DICT002": {
         'MAP' : 'XXXX',
         'SSC'   : '0333',
         'Method': 'H',
         'Code1': 'B19SN99854',
         'Reg ID'  : 'S'
    }
}

Это позволяет избежать поиска переменной. Вам нужно просто получить значение по ключу в словаре.

Код:

c = "DICT001"
tmp_dict = dictionaries.get(c, None)
print(tmp_dict if tmp_dict else "There's no key \"{}\"".format(c))
2
Olvin Roght 2 Май 2019 в 10:06

Или лучше просто создать родительский словарь,

parent_dict = {
      'DICT001' = {
     'MAP' : 'XXXX',
     'SSC'   : '0333',
     'Method': 'R',
     'Code1': 'S093733736',
     'Reg ID'  : '01'
      },
      'DICT002' = {
     'MAP' : 'XXXX',
     'SSC'   : '0333',
     'Method': 'H',
     'Code1': 'B19SN99854',
     'Reg ID'  : 'S'
 }
}

search = input("Enter Dictionary to Search:")
if search in parent_dict:  
   print(f'here\'s you dict {parent_dict[search]}')
else:
   print('child dictionary not found')
0
P.hunter 2 Май 2019 в 10:10

globals() и locals() являются словарями, содержащими все globally и locally определенные переменные соответственно. Вы можете использовать любой из них для вашего случая использования.

Примере:

globals()['DICT001']

ИЛИ чтобы избежать ошибки, если словарь отсутствует, сделайте это:

globals().get('DICT001', None)
0
Swapnesh Khare 2 Май 2019 в 10:08