2014-01-23 3 views
0

Каков наилучший способ заставить пользователя войти в список (или сингулярный) номер, чтобы удалить строковый ключ из словаря?Список пользователей для удаления ключей из Словаря

до сих пор это, где я.

Мой словарь для удаления значений из (словарь генерируется так, что он будет меняться).

d = {'Seven': 22, 'Six': 0, 'Three': 35, 'Two': 0, 'Four': 45, 'Five': 34, 'Eight': 0} 

1) Итак, как мне получить вход, это мой первый запрос. Это была моя попытка, но не удалось.

>>> s = raw_input('1 2 3 4') 
1 2 3 4 
>>> numbers = map(str, s.split()) 
>>> numbers 
[] 

>>> s = raw_input('1 2 3 4') 
1 2 3 4 
>>> numbers = map(int, s.split()) 
>>> numbers 
[] 

2) Как бы преобразовать ints в форму слова? Здесь диапазон ограничен, в словаре не будет больше 20 записей. Итак, моя первоначальная мысль заключалась в том, чтобы создать ключ для интерпретации информации.

e = {'One': 1, 'Two': 2, 'Three': 3, 'Four': 4} 

и это работает не так, как ожидалось, удаляя только одну запись.

>>> e = {'One': 1, 'Two': 2, 'Three': 3, 'Four': 4} 
>>> {k:v for k,v in e.items() if v!=(1 and 3)} 
{'Four': 4, 'Two': 2, 'One': 1} 

Мое намерение состоит в том, чтобы удалить значения из d, а не e. Это также непрактично, так как я не знаю, сколько записей вводит пользователь, поэтому использование операторов «и» кажется неправильным.

ответ

2

Во-первых, параметры raw_input предназначены только для отображения. Вы должны ввести его самостоятельно:

>>> s = raw_input("Enter a sequence of number: ") 
Enter a sequence of number: 1 2 3 4 
>>> print s 
1 2 3 4 

Теперь, вы можете просто использовать список, чтобы отобразить его:

m = ['1':'One', '2':'Two', '3':'Three', .., '10':'Ten'] 

Редактировать Вот как преобразовать:

e = [v for k, v in m.items() if k in s] 

В-третьих, понимание словаря (или «понимание» вообще) не предназначалось для изменения существующего объекта, а для создания нового. Ближайший вы можете получить, чтобы сделать его действовать как фильтр, и переназначить результаты обратно d

d = {k:v for k, v in d.items() if k not in e} 
+0

Как конвертировать пользовательский ввод с в е? – sayth

+0

@sayth Обновлен мой ответ несколькими изменениями. – aIKid

+0

Что-то об этом не работает >>> s = raw_input («Enter Numbers:») Введите цифры: 1 2 3 4 >>> s '1 2 3 4' >>> numbers = map (int, s.split()) >>> номера [1, 2, 3, 4] >>> m = ['One', 'Two', 'Three', 'Four', 'Five' , «Шесть», «Семь», «Восьмерка») >>> e = [i for i in m, если i in s] >>> e [] >>> e = [i for i in m if i in numbers] >>> e [] – sayth

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