首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >循环中的Python匹配字符串

循环中的Python匹配字符串
EN

Stack Overflow用户
提问于 2018-01-07 02:32:19
回答 3查看 129关注 0票数 0
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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‘。

预期结果:

结果1:(这需要存储在一个变量中,因为我需要将它发送到邮件正文中)

100.20.300.400瓦拉古成功

100.20.300.500成功

结果2:(这需要存储在变量中,也需要以单独的邮件发送)

100.20.300.600拉吉失败

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-07 03:01:02

请参阅下面的一些内联注释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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')

# no need to do this since ap_database is already a list, so we can iterate over it.
# apall = ap_database[0], ap_database[1], ap_database[2]

# ip_list does not change, so we can define it once outside the loop
ip_list = ['100.20.300.400', '100.20.300.500', '100.20.300.700']

# let us add two more variables to hold the fail and success list
success_list = []
fail_list = []

for ap in ap_database:

    # ap is a dict, so use ap.get('key') or ap['key'] instead of ap.__getitem__('key')
    # note that ap.get('key') returns None if key does not exist, while ap['key'] throws an error.
    public = ap.get('Public IP')
    name = ap.get('Name')

    # check whether public is in ip_list and print appropriate message
    if public in ip_list:
        print public, name, 'Success'
        success_list.append(ap)
    else:
        print public, name, 'Fail'
        fail_list.append(ap) 
票数 0
EN

Stack Overflow用户

发布于 2018-01-07 02:55:56

有很多方法可以达到你想要做的事情。

在解析apdb时,您可以检查'Public‘是否在ip_list中,然后追加failed_ipsucceed_ip列表。

然后,您只需处理这两个列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/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)

结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[('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 |
+----------------+------+--------+
票数 0
EN

Stack Overflow用户

发布于 2018-01-07 02:58:34

我已经稍微修改了您的代码: 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)您可以直接在ip_list:if public in ip_list:中搜索公共ip,而不是下面的2行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for ip in ip_list:
        if ip == public:

4)与使用getitem不同,只使用get方法对我来说更易读(如果您愿意的话,可以使用getitem)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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'])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48136280

复制
相关文章
iOS进阶之runtime作用
前言 Runtime基本是用C和汇编写的,可见苹果为了动态系统的高效而作出的努力。你可以在这里下到苹果维护的开源代码。苹果和GNU各自维护一个开源的runtime版本,这两个版本之间都在努力的保持一致。Objective-C 从三种不同的层级上与 Runtime 系统进行交互,分别是通过 Objective-C 源代码,通过 Foundation 框架的NSObject类定义的方法,通过对 runtime 函数的直接调用。大部分情况下你就只管写你的Objc代码就行,runtime 系统自动在幕后辛勤劳作着。
Dwyane
2018/05/22
6380
React Native 和iOS Simulator 那点事
React Native 和iOS Simulator 那点事 尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://www.devio.org) 本文出自《React Native学习笔记》@http://www.devio.org系列文章。 问题1:使用React Native时按cmd+r无法reload js,cmd+d无法唤起 React Native开发菜单? 不知大家是否有过这样的经历,用 React Native开发应用正不亦乐乎的时候,突然发现,cmd+r,cmd+
CrazyCodeBoy
2018/05/07
2.1K0
React Native 和iOS Simulator 那点事
指针在函数中的作用
指针传递地址时,指针变量产生了副本,但副本与原变量所指的内存区域是同一个。对指针副本指向的变量进行改变,就是改变原指针变量所指向的变量。
跋扈洋
2022/04/27
2.9K0
指针在函数中的作用
iOS减包实战:Compress PNG Files作用分析
减包这个词大家应该都不陌生,在减包过程中,图片资源的优化这项应该是必经之路了。
天天P图攻城狮
2018/12/04
4.3K0
iOS减包实战:Compress PNG Files作用分析
在iOS上推流
编译librtmp需要用到openssl,所以先编译openssl,下载脚本OpenSSL。
Helloted
2022/06/07
8720
在iOS上推流
Spring Security 在 Servlet 的作用区域
Spring Security 使用标准的 Servlet 过滤器(Filter) 并与 Servlet 容器集成。 这个意味着 Spring Security 可以在任何运行运行在 Servlet 容器(Servlet Container)中的应用上使用。 更具体地说,你可以不使用 Spring,而是基于 Servlet 的应用程序中使用 Spring Security。
HoneyMoose
2022/09/30
3150
Spring Security 在 Servlet 的作用区域
虚拟变量在模型中的作用
实际场景中,有很多现象不能单纯的进行定量描述,只能用例如“出现”“不出现”这样的形式进行描述,这种情况下就需要引入虚拟变量。例如即将到来的女生节,每年的这个时候毛绒玩具的销量都会上升,说明女生节对毛绒玩具的销量产生了一定影响,但是这个影响程度又很难界定,这时只能定义一个虚拟变量去描述事情“发生”与“不发生”了。
许卉
2019/07/15
4.3K0
ZooKeeper在HBase集群中的作用
ZooKeeper作为分布式协调组件,在大数据领域的其他分布式组件中往往扮演着重要的辅助角色,因此我们就算不单独去研究ZooKeeper,也短不了要接触它。本文就以最典型的HBase为例,简要介绍ZooKeeper为HBase提供了哪些功能。
Flink实战剖析
2022/04/20
1.4K0
ZooKeeper在HBase集群中的作用
WiFi在物联网中的作用
The-Role-of-Wi-Fi-in-the-IoT-Space-1536x944-1.jpg
用户4122690
2020/06/28
1.7K0
WiFi在物联网中的作用
Lua组件在Redis中的作用
这种功能允许用户在Redis服务器上执行原子性的操作,从而避免了多次网络往返的开销。
一凡sir
2023/10/03
2890
Lua组件在Redis中的作用
Etcd在kubernetes集群中的作用
Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息。在后面具体的安装环境中,我们安装的etcd的版本是v3.1.5,整个kubernetes系统中一共有两个服务需要用到etcd用来协同和存储配置,分别是:
菲宇
2019/06/12
3.8K0
AI在抗击疫情中的作用
这几十年以来,肆虐全球的新冠病毒可以说是最具感染性了。正如我们目前所见,新冠病毒已经给全世界造成了极大的破坏,因此,借助科技的力量抵抗疫情也变得十分必要。AI就是我们要说的重要的科技手段。本文将讨论AI在抗击新冠疫情中的重要作用。
人工智能小咖
2020/04/16
1.3K0
AI在抗击疫情中的作用
Redis在秒杀场景的作用
秒杀可分成秒杀前、秒杀中和秒杀后三阶段,每个阶段的请求处理需求不同,Redis具体在秒杀场景的哪个环节起到作用呢?
JavaEdge
2023/02/13
7620
Redis在秒杀场景的作用
KubeEdge及其在MEC中的作用
KubeEdge是一个云原生计算基金会(CNCF)sandbox项目,旨在将Kubernetes从云扩展到边缘。它提供了基础架构支持,以支持在边缘节点上部署和编排云原生服务,以及边缘与云之间元数据的同步。
CNCF
2020/07/16
1.6K0
iOS的开发中相关证书的理解及作用
我们都知道开发iOS应用是少不了苹果证书的,对于一个新手来说,这个是比较头疼的是,毕竟真机测试,发布蒲公英测试,苹果提供的内测testflight,上传到app-store都要跟苹果证书打交道,上面这些步骤最好就是自己走一遍,不然你对苹果的开发证书的制作流程还是会一头雾水,其实说到底就是证书对应测试环境和发布环境,配置证书也是对应测试环境和发布环境,然后你需要创建一个app ID去把证书和配置文件联系起来。
青年码农
2020/10/13
2.1K0
iOS的开发中相关证书的理解及作用
在 MvvmCross 下使用 iOS Storyboard
可能是因为上面的缺点吧, Mvx 没有提供内置的 Storyboard 支持。 不过 Mvx 的扩展性是很强大的, 通过自定义 MvxTouchViewsContainer 就可以实现对 Storyboard 的支持。
beginor
2020/08/10
7160
在 MvvmCross 下使用 iOS Storyboard
spring在ssh框架中的作用学习
spring在ssh框架中的作用学习 在SSH框假中spring充当了管理容器的角色。我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语 句。Struts是用来做应用层的,他它负责调用业务逻辑serivce层。所以SSH框架的流程大致是:Jsp页面—-Struts——Service(业务逻辑处理类)—Hibernate(左到右) struts负责控制Service(业务逻辑处理类),从而控制了Service的生命
用户1289394
2018/02/26
1.2K0
【iOS开发】使用 protocol 与 extension 来限制函数作用域
今天碰到这样一个场景,我需要一个仅仅用来展示网页的页面,那么在 iOS 9 中,我可以使用 SFSafariViewController,而在 iOS 8 及之前版本中,我会使用一个 WebView 来占据整个视图空间,来做这件事。
KyXu
2019/04/11
5560
【夯实基础】Spring在ssh中的作用
尊重版权:http://blog.csdn.net/qjlsharp/archive/2009/03/21/4013255.aspx
全栈程序员站长
2022/07/07
6940
点击加载更多

相似问题

MaterializeCSS select()方法在IOS上不起作用

144

MaterializeCSS图标在Angular 7的导航栏上不起作用

19

TouchableOpacity在ios上不起作用

31

.on("click")在iOS上不起作用

22

VideoJS:在IOS上不起作用

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文