Доступ к значениям словаря Python 3x для имени переменной словаря - PullRequest
1 голос
/ 23 декабря 2019

У меня есть файл Python 3.7.3, specs.py, содержащий несколько словарей с одинаковыми ключами.

f150 = {
    'towing-capacity' : '3,402 to 5,897 kg',
    'horsepower' : '385 to 475 hp',
    'engine' : ' 2.7 L V6, 3.3 L V6, 3.5 L V6, 5.0 L V8'
}

f250 = {
    'towing-capacity' : '5,670 to 5,897 kg',
    'horsepower' : '290 to 450 hp',
    'engine' : '6.2 L V8, 6.7 L V8 diesel, 7.3 L V8'
}

В другом файле я импортирую specs.py и хотел бы иметь возможностьнайти значение, связанное с данным ключом для переменной carmodel.

hp = specs.{what should I put here so it equals cardmodel}.['horsepower']

Ответы [ 3 ]

1 голос
/ 23 декабря 2019

вы можете использовать

getattr(specs, carmodel)['horsepower']

Поскольку глобальные переменные будут атрибутами для объекта модуля.

Но было бы более разумно, возможно, вложить ваш диктант дальше:

cars = {
'f150': {
    'towing-capacity' : '3,402 to 5,897 kg',
    'horsepower' : '385 to 475 hp',
    'engine' : ' 2.7 L V6, 3.3 L V6, 3.5 L V6, 5.0 L V8'
},

'f250' : {
    'towing-capacity' : '5,670 to 5,897 kg',
    'horsepower' : '290 to 450 hp',
    'engine' : '6.2 L V8, 6.7 L V8 diesel, 7.3 L V8'
}}}

Тогда вы можете использовать как:

specs.cars[carmodel]['horsepower']
1 голос
/ 23 декабря 2019

Вы можете ссылаться на любой атрибут любого объекта (модули тоже объекты) через строку в python, используя getattr

import specs
getattr(specs, 'f150')
0 голосов
/ 23 декабря 2019

Вы можете сделать это так:

import specs
specs.f150                                                                                                                                                                          

#{'towing-capacity': '3,402 to 5,897 kg',
# 'horsepower': '385 to 475 hp',
# 'engine': ' 2.7 L V6, 3.3 L V6, 3.5 L V6, 5.0 L V8'}

specs.f150['horsepower']                                                                                                                                                            
# '385 to 475 hp'
...