扫描所选组字典中的列表

时间:2014-01-26 19:04:57

标签: python

考虑这样的字典:

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,则应检测到与PC1的冲突。因此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:]

1 个答案:

答案 0 :(得分:0)

我认为你想要的是ip->host字典, 所以ip和amp;主持人,您可以轻松检查是否已经使用过它们。

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()]