python - 匹配字符串中的项目
问题描述
我正在尝试使用从工作申请数据库收到的输出,我需要将每个帐户信息组织到一个列表中,但我不确定申请人的 startdates 如何匹配,因为它从 #1 开始,但有时它需要与不同的数字取决于该人是否被雇用。
例如 startdate#1 需要与 name#3 配对,而 startdate#2 需要与 name#4 配对。
我从什么开始:
FirstName#1 = Joe | FirstName#2 = Michael | FirstName#3 = Harold | FirstName#4 = John | LastName#1 = Miles | LastName#2 = Gomez | LastName#3 = Hall | LastName#4 = Hancock | Hired#1 = False | Hired#2 = False | Hired#3 = True | Hired#4 = True | StartDate#1 = 10/31/2018 | StartDate#2 = 10/25/2018 |
需要输出:
[['Joe','Miles','False'], ['Michael','Gomez','False'], ['Harold','Hall','True','10/31/2018'], ['John','Hancock','True','10/25/2018']]
解决方案
您可以按以下方式执行此操作:(您可能想阅读有关 python 'exec' 的信息)
import re
db_output = """FirstName#1 = Joe | FirstName#2 = Michael | FirstName#3 = Harold | FirstName#4 = John | LastName#1 = Miles | LastName#2 = Gomez | LastName#3 = Hall | LastName#4 = Hancock | Hired#1 = False | Hired#2 = False | Hired#3 = True | Hired#4 = True | StartDate#1 = 10/31/2018 | StartDate#2 = 10/25/2018 |"""
# define the keys
keys = ['FirstName', 'LastName', 'Hired', 'StartDate']
# create empty dict with name in keys
for key in keys:
exec('{} = dict()'.format(key))
# parse and build dicts
for data in db_output.split(' |'):
data = data.strip()
if data == '':
continue
reobj = re.search('(\S+)#(\d+)\s+=(.*)', data)
if reobj:
key = reobj.group(1).strip()
num = int(reobj.group(2))
value = reobj.group(3).strip()
print key, num, value
exec('{}[num] = value'.format(key))
# get the inexes for FirstName and sort it
exec('firstname_indexes = {}.keys()'.format(keys[0]))
firstname_indexes = sorted(firstname_indexes)
# get all local variables (required due to usage 'exec')
local = locals()
# variable to collect all data
output = list()
# Start date starts with 1
startdate_track = 1
# use firstname indexes and track start date, create a tmp list and
# then append to output
for fn_index in firstname_indexes:
tmp = list()
for key in keys:
if key == 'StartDate':
if tmp[-1] == 'True':
tmp.append(local[key][startdate_track])
startdate_track += 1
output.append(tmp)
else:
tmp.append(local[key][fn_index])
print output
输出:
[['Joe', 'Miles', 'False'], ['Michael', 'Gomez', 'False'], ['Harold', 'Hall', 'True', '10/31/2018'], ['John', 'Hancock', 'True', '10/25/2018']]
推荐阅读
- python - 使用 udf 和 numpy 在 Pyspark 中排序列表
- angular - javascript Filter() 用于验证信用卡标志的问题
- windows-7 - pgAdmin(Windows 7)中的文本选择不起作用
- java - Hibernate Validator @SafeHtml 无法允许自定义 HTML 标记和属性
- c# - 过滤器无法正常工作 - 当内部连接表时
- c# - Chilkat 如何使用 Bash 终端的参数启动 SSH
- solr - Solr 搜索是否可以在键中包含通配符?
- objective-c - ARKit 深度图像素缓冲区中的黑色像素是什么?
- google-search-console - iframe 视频加载图像中缺少字段“thumbnailUrl”
- java - Spring MVC Hibernate没有xml使用DriverManagerDataSource如何映射属性