Есть ли словарная структура данных, которая позволила бы искать «ключ» и «значение» - PullRequest
2 голосов
/ 08 апреля 2011

Мне нужна структура для моей маленькой программы на Python, чтобы сохранить список , содержащий не более 500 имен с одним номером в каждом.Имена будут уникальными, но цифры будут повторяться (часто).Сначала я подумал о словаре , но мне также нужно иметь возможность искать номера, например, мне нужно изменить все 2 на 3.Чтобы вы посоветовали?

Я новичок в Python, поэтому я уверен, что упустил простое решение.

("Spiderman",1)
("Dr. House",2)
("Jon Skeet",1)

Ответы [ 2 ]

3 голосов
/ 08 апреля 2011

Вы можете использовать dict и искать по значению, например, так:

names = {"Spiderman":1, "Dr. House":2, "Jon Skeet":1}

resulting_keys = [k for k, v in names.iteritems() if v == 1]
# returns ['Spiderman', 'Jon Skeet']

Тогда вы можете сделать что-то вроде:

 names.update(dict((k,names[k] + 1) for k in resulting_keys))

Который теперь будет обновлять имена до:

{'Jon Skeet': 2, 'Dr. House': 2, 'Spiderman': 2}
2 голосов
/ 08 апреля 2011

Словарь будет работать. Если вам нужно изменить сохраненные значения:

>>> d = {"SpiderMan":1, "Dr.House":2, "Jon Skeet":1}
>>> for k,v in d.items():
...     if v == 1:
...         d[k] = v+1
...         
...     
... 
>>> d
{'SpiderMan': 2, 'Dr.House': 2, 'Jon Skeet': 2}

Это будет линейный поиск (O (n)). Вам нужно лучше, чем это?

...