2016-04-13 5 views
-1

Я делаю проект, но есть одна проблема, я столкнулся при использовании словаря, более конкретно, как добавить записькак добавить в словарь, используя пользовательский ввод

thing = {'a':1, 'b':2, 'c':3} 
thing.update(input('add more')) 
print(thing) 

Проблема я получаю когда я пытаюсь добавить к этому: ValueError: dictionary update sequence element #0 has length 1; 2 is required. Итак, каким образом я должен помещать информацию так, чтобы словарь обновлялся? До сих пор я пробовал «d [4]», «d 4» и «d:4».

+2

'update' принимает словарь как аргумент, а не строку. –

+0

цитаты только для того, чтобы показать, что я пробовал их точно так, когда я ввел их, я не включил котировки –

+0

Просто разделите вход и добавьте его напрямую, например: 'k, v = input ('add more ').Трещина(); вещь [k] = int (v) ', тогда вход' 'd 4" 'приведет к' thing ['d'] = 4'. – AChampion

ответ

0

Если ваша цель состоит в том, чтобы добавить один элемент, вы можете сделать что-то вроде этого:

thing['d'] = 4 

подставит вход в подходящем месте.

+0

вещь, я хочу попросить пользователя добавить ее в себя –

+0

Вправо.Это синтаксис для этого (вместо расширения), не зная больше о том, что вы ожидаете от пользователя, который будет выглядеть. Вам нужно проанализировать ввод пользователя (в зависимости от того, как вы ожидаете, что он будет его вводить), а затем подставить введенный ключ для '' d'' и введенное значение для '4'. – Christian

1

Вы должны преобразовать ваш ввод в словарь, используя фигурные скобки ({ }). Вы можете разбить вход так, чтобы у вас была строка, содержащая ваш ключ и строку, содержащую ваше значение.

Например, если вы хотите добавить строку input которая была назначена значение d:4 вы будете использовать:

key, val = your_input.split(':') 
thing.update({key:val}) 

Это происходит потому, что функция dict.update требует словаря в качестве параметра.

+0

Как это будет работать? '{}' является для словарного литерала и не принимает строку. – AChampion

+0

@AChampion вы правы, я отредактировал свой ответ соответственно – colelemonz

+1

'tuple' присваивание также весьма полезно:' key, val = input.split (':') '(хотя я бы не использовал переменную с именем' input') – AChampion

1

Вы не указали, что допустимо для входа пользователя, однако вы можете сделать это с помощью ast.literal_eval(). Это требует от пользователя ввода действительного словаря Python.

>>> from ast import literal_eval 
>>> thing = {'a':1, 'b':2, 'c':3} 
>>> thing.update(literal_eval(input('add more: '))) 
add more: {'d':4, 'e':5, 'z':26} 
>>> thing 
{'a': 1, 'c': 3, 'z': 26, 'd': 4, 'b': 2, 'e': 5} 

Вход не очень удобный.

Вы можете просто ввести пользовательские ключи и значения, разделенные пробелом, например. a 1 e 5 z 26. Затем преобразовать, что в Словаре и выполнить обновление:

>>> thing = {'a':1, 'b':2, 'c':3} 
>>> it = iter(input('add more: ').split()) 
add more: a 10 y 25 
>>> thing.update(dict(zip(it, it))) 
>>> thing 
{'y': '25', 'c': 3, 'b': 2, 'a': '10'} 

Или вы можете использовать : для разделения ключей и значений, с пространством между каждым элементом:

>>> thing = {'a':1, 'b':2, 'c':3} 
>>> thing.update(dict(s.split(':') for s in input('add more: ').split())) 
add more: a:10 z:26 
>>> thing 
{'a': '10', 'c': 3, 'z': '26', 'b': 2} 
-1
dictionary = {'Big brother':'Onii-chan', 'Big sister': 'Onee-sama', 'Hello': 'Konichiwa', 'Master': 'Sensei', 'Good Morning': 'Ohayo', 'Senior': 'Senpai', 'Ocean': 'Kaiyou/Umi','Darkness': 'Yami', 'Light': 'Hikari', 'Sky':'Sora','x':[1,2]} 

keep_going = 'Y' 


while keep_going == 'y' or keep_going == 'Y': 

print(dictionary.keys()) 

x = input("Pick one out of the list to see the translation in japanese") 

print(dictionary[x]) 

keep_going = input('would you like another one? (Y for Yes): ') 
Смежные вопросы