apdb = {'AP Database': [{'AP Type': '110H',
'Name': 'varagu',
'Public IP': '100.20.300.400',
'Wired MAC Address': 'aa:bb:cc:dd:ee:11'},
{'AP Type': '110H',
'Name': 'thinai',
'Public IP': '100.20.300.500',
'Wired MAC Address': 'aa:bb:cc:dd:ee:22'},
{'AP Type': '110H',
'Name': 'Ragi',
'Public IP': '100.20.300.600',
'Wired MAC Address': 'aa:bb:cc:dd:ee:33'}]}
ap_database = apdb.get('AP Database')
apall = ap_database[0], ap_database[1], ap_database[2]
for ap in apall:
public = ap.__getitem__('Public IP')
name = ap.__getitem__('Name')
ip_list = ['100.20.300.400', '100.20.300.500', '100.20.300.700']
for ip in ip_list:
if ip == public:
print public + ' ' + name + ' ' + "Success"
我坚持这个。我需要将'ip'映射为'public'。
预期结果:
结果1 :(这需要存储在变量中,因为我需要在邮件正文中发送)
100.20.300.400 Varagu成功
100.20.300.500 Thinai成功
结果2 :(这需要存储在变量中,也可以单独发送)
100.20.300.600 Ragi失败
答案 0 :(得分:0)
有很多方法可以实现您的目标。
在解析apdb时,您可以检查“公共IP”是否在ip_list
中,然后附加failed_ip
或succeed_ip
列表。
然后,您只需要处理这两个列表:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
apdb = {'AP Database': [{'AP Type': '110H',
'Name': 'varagu',
'Public IP': '100.20.300.400',
'Wired MAC Address': 'aa:bb:cc:dd:ee:11'},
{'AP Type': '110H',
'Name': 'thinai',
'Public IP': '100.20.300.500',
'Wired MAC Address': 'aa:bb:cc:dd:ee:22'},
{'AP Type': '110H',
'Name': 'Ragi',
'Public IP': '100.20.300.600',
'Wired MAC Address': 'aa:bb:cc:dd:ee:33'}]}
ap_database = apdb.get('AP Database')
apall = ap_database[0], ap_database[1], ap_database[2]
ip_list = ['100.20.300.400', '100.20.300.500', '100.20.300.700']
succeed_ip = []
failed_ip = []
for ap in apall:
success = None
failed = None
public = ap.__getitem__('Public IP')
name = ap.__getitem__('Name')
if public in ip_list:
succeed_ip.append((public, name))
continue
failed_ip.append((public, name))
print succeed_ip
print failed_ip
table = PrettyTable(['IP', 'Name', 'Result'])
table.add_row(succeed_ip[0])
table.add_row(succeed_ip[1])
print(table)
ftable = PrettyTable(['IP', 'Name', 'Result'])
ftable.add_row(failed_ip[0])
print(ftable)
[('100.20.300.400', 'varagu', 'success'), ('100.20.300.500', 'thinai', 'success')]
[('100.20.300.600', 'Ragi', 'Failed')]
+----------------+--------+---------+
| IP | Name | Result |
+----------------+--------+---------+
| 100.20.300.400 | varagu | success |
| 100.20.300.500 | thinai | success |
+----------------+--------+---------+
+----------------+------+--------+
| IP | Name | Result |
+----------------+------+--------+
| 100.20.300.600 | Ragi | Failed |
+----------------+------+--------+
答案 1 :(得分:0)
我稍稍调整了你的代码:
1)apall = ap_database[0], ap_database[1], ap_database[2]
此分配不是必需的,因为ap_database = apdb.get('AP Database')
这将使ap_database成为列表
2)ip_list = ['100.20.300.400', '100.20.300.500', '100.20.300.700']
这应该不在循环中,不需要为每个循环周期重新分配
3)而不是下面的2行,您可以直接在ip_list中搜索公共IP,如:if public in ip_list:
for ip in ip_list:
if ip == public:
4)而不是使用 getitem ,只使用get方法对我来说更具可读性(仅限我,如果您愿意,可以使用 getitem )
apdb = {'AP Database': [{'AP Type': '110H',
'Name': 'varagu',
'Public IP': '100.20.300.400',
'Wired MAC Address': 'aa:bb:cc:dd:ee:11'},
{'AP Type': '110H',
'Name': 'thinai',
'Public IP': '100.20.300.500',
'Wired MAC Address': 'aa:bb:cc:dd:ee:22'},
{'AP Type': '110H',
'Name': 'Ragi',
'Public IP': '100.20.300.600',
'Wired MAC Address': 'aa:bb:cc:dd:ee:33'}]}
ap_database = apdb.get('AP Database')
ip_list = ['100.20.300.400', '100.20.300.500', '100.20.300.700']
results = {'success': [], 'fail': []}
for ap in ap_database:
public = ap.get('Public IP')
name = ap.get('Name')
if public in ip_list:
results['success'].append(public)
else:
results['fail'].append(public)
print(results['success'], reuslts['fail'])
答案 2 :(得分:0)
请参阅下面的一些内联评论
> groupings <- apply(distanceMatrix, 1, which.min)
> [1] 1 1 1 1 3 2 3 2 1 1