2013-08-28 3 views
1

Итак, у меня есть словарь, который состоит из чисел, соответствующих слову. Я хочу иметь доступ к части словаря на основе того, что вводит пользователь.Как получить доступ к части словаря в python?

Как сделать так, чтобы пользователь вводил число, например. «2», программа выбирает элемент из словаря, который соответствует «2» и печатает его? или если пользователь вводит «водород» (слово в словаре), ему необходимо напечатать соответствующее число («1»).

Заранее спасибо

+0

Что делает ваш словарь выглядеть? –

+2

В будущем было бы полезно продемонстрировать нам, что вы пытаетесь решить проблему. – Greg

+0

Вы можете использовать одно из следующих решений или использовать [bidict] (https://pypi.python.org/pypi/bidict) – Abhijit

ответ

0

Предполагая, что ваш словарь выглядит следующим образом (так как вы сказали, номера к элементам):

elements = {'2': 'Hydrogen', '8': 'Oxygen'} 

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

user_input = '2' 
for key,value in elements.items(): 
    if user_input == key: 
     print value 
    if user_input == value: 
     print key 

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

def search_dictionary(user_input, haystack): 
    for key,value in haystack.items(): 
     if user_input == key: 
      return value 
     if user_input == value: 
      return key 

Затем использовать его как это:

user_input = raw_input('Please enter your search item: ') 
elements = {'2': 'Hydrogen', '8': 'Oxygen'} 
result = search_dictionary(user_input, elements) 
if result: 
    print("The result of your search is {0}".format(result)) 
else: 
    print("Your search for {0} returned no results".format(user_input)) 
+0

Обратите внимание, что это выполняется в 'O (N)' времени. –

+0

Я не думаю, что это действительно так важно для OP :) –

0

сделать два словаря:

dict1 = { 
    1: "baz", 
    2: "bar", 
    ... 
} 

dict2 = { 
    "hydrogen": 1, 
    "helium": 2, 
    ... 
} 

input_ = raw_input("pick something: ") 
try: 
    print dict1[int(input_)] 
except ValueError: 
    print dict1[dict2[input_]] 
except KeyError: 
    print "Your desired key does not exist!" 
1

Вы можете создать либо два dicts один, который отображает элементы их атомный номер и один, который отображает атомный номер для элементов. Это будет работать в O(1) времени.

>>> ele2atm = {'hydrogen':'2', 'oxygen':'8', 'carbon':'7'} 
>>> atm2ele = {k:v for v, k in ele2atm.items()} 
def get_value(key): 
    try: 
     return ele2atm[key] 
    except KeyError: 
     return atm2ele[key] 


>>> get_value('8') 
'oxygen' 
>>> get_value('carbon') 
'7' 

или использовать bidict пакет, который позволяет отображение взаимно-однозначное соответствие между ключами и значениями.

Пример:

>>> husbands2wives = bidict({'john': 'jackie'}) 
>>> husbands2wives['john'] # the forward mapping is just like with dict 
'jackie' 
>>> husbands2wives[:'jackie'] # use slice for the inverse mapping 
'john' 
Смежные вопросы