Форум сайта python.su
подскажите.делаю справочник телефонный.нужно что бы можно было удолить контакт из словаря по значению.по ключу я знаю как.значение в данном случае контактный телефон
elif choise == '7': q = input("напишите телефон контакта которого вы хотите удалить ") for q in sqr: del spr[q]
Офлайн
вопрос - если в адресной книге присутствует два разных контакта, но при этом с одинаковым номером - удалить нужно обоих ?
ПО теме: нужен обход через .items() сравнивая значения запоминать ключи по которым совпали значения - потом удалять элементы словаря по найденным ключам.
Офлайн
a={'name1':'547','name2':'636','name3':'547'} q= raw_input('Vvod namber:') for name, namber in a.items(): if namber == q: del a[name] print a
Офлайн
wallet
Просто для сведения, на Python3 аналогичный код выдаст Exception - RuntimeError: dictionary changed size during iteration . Потому что во 2 питоне .items() вернет список кортежей т.е. новый объект данных, а в 3 версии вернется views - отображение. Что означает что при изменении словаря (удаление,добавление элементов) отображение будет, прям каламбур, отображать эти изменения. Как следствие изменится размер и существует вероятность изменения последовательности обхода ключей. Поэтому сгенерируется исключение - что бы явно обозначить возможную проблему с пропуском элементов.
Офлайн
JOHN_16Поправил
Просто для сведения, на Python3 аналогичный код выдаст Exception - RuntimeError: dictionary changed size during iteration .
>>> a={'name1':'547','name2':'636','name3':'547'} >>> q='547' #raw_input('Vvod namber:') >>> for name, namber in tuple(a.items()): ... if namber == q: ... del a[name] ... print(a) ... {'name2': '636', 'name3': '547'} {'name2': '636'} >>>
Отредактировано py.user.next (Ноя. 22, 2016 03:03:53)
Офлайн
items по любому нада использовать?
Офлайн
py.user.next
да, оборачивание в tuple или list как раз с имитирует поведение в Питоне 2
Офлайн
подскажите еще один вопрос по таму же справочнику ы у меня в словаре есть список номеров который принадлежит разным контактам. как мне сделать поиск по значениям словаря допустим по первым 4 цифрам.грубо говоря 8926.
я так понимаю нужен цикл фор. но не могу понять как это лучше сделать
Офлайн
a = {....} for key, value in a.items(): if value.startswith(first_part_of_number): do_some_action()
Офлайн