2014-01-26 3 views
0

Рассмотрит словарь как это:Сканирования Копания списков внутри словаря выбранных групп

dic={ 'PC2': ['02:02:02:02:02:02', '192.168.0.2', '200'], 
    'PC3': ['03:03:03:03:03:03', '192.168.0.3', '200'], 
    'PC1': ['01:01:01:01:01:01', '192.168.0.1', '200'] }  

Как искать конкретное значение внутри списка? Во-первых, я хочу, чтобы пользователь вводил имя хоста и ip. например 'PC1' и 192.168.0.1, а затем мне нужно выяснить, был ли 192.168.0.1 уже назначен другому хосту в словаре. В этом случае мне нужно будет пропустить поиск внутри списка, назначенного входному хосту пользователя.

Другими словами, если пользовательские входы 'PC1' и 192.168.0.1, я хотел бы пропустить поиск в значениях 'PC1'. Поэтому он должен обнаруживать совпадения только с разными хостами, пропуская 'PC1'.

Если я ввожу 'PC4' и 192.168.0.1, тогда он должен обнаружить конфликт с ПК1. Таким образом, PC4 не будет вставлен или будет удален, если он уже присутствует.

Мое текущее решение:

z=raw_input("Enter Host, Mac, ip and time") 
t=z.split() 
t[0]=z[1:] 
for key in dic: 
    if t[2] in dic[key]: 
     del dic[t[0]] 
    else: 
     dic[t[0]] = t[1:] 
+0

Почему вы используете список? он не поддерживает работу, в которой вы нуждаетесь. –

+0

Что такое 'dic' и почему вы переопределяете' z'? – Elisha

+0

Извините, это была опечатка. – user3238040

ответ

0

Я думаю, что вы хотите ip->host словарь, так дал IP & хозяин, вы можете легко проверить, если любой из них уже был использован.

ip2host = {dic[key][1]:key for key in dic.keys()} 

(вы уже можете использовать dic для host->ip словаря)

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

host,mac,ip = raw_input("Enter Host, Mac, ip and time").split() 

ip2host = {dic[key][1]:key for key in dic.keys()} 
if host in dic.keys() 
    # <Override in db or whatever you want to do here> 
    dic[host][0] = mac 
    dic[host][1] = ip 
else: 
    # <add to DB code here> 
    if ip in ip2host.keys(): 
     # <deleted just added host> 

Обратите внимание, что вам нужно, чтобы заменить мой комментарий с кодом доступа к БД. Кроме того, я не уверен, что понял все ваши потребности, но, возможно, вы можете сохранить список ips вместо ip2host. Вы можете создать такой список:

ips = [dic[k][1] for k in dic.keys()] 
+0

Пробовал получил ошибку: Traceback (самый последний вызов последнего): Файл "C: /Python27/b.py", строка 11, в для ключа в DIC: RuntimeError: словарь изменен размер во время итерации – user3238040

+0

@ user3238040 это было проблема с кодом, который я копировал с вашего, но я думаю, что исправил его. попробуй это сейчас. (я добавил '.keys()') – Elisha

+0

Кстати, я не думаю, что это хорошая идея, чтобы сохранить ваши файлы под 'c:/Python27 /' – Elisha

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