我有(在我看来)是一个相当复杂的问题。我会尽量简洁 - 尽管为了充分理解问题,您可能需要点击我的配置文件,然后查看我在StackOverflow上发布的(只有其他)两个问题。简而言之:我有两个列表 - 一个是包含电子邮件字符串的列表,其中包含设施名称和事件日期。另一个是每个电子邮件的设施ID(我使用以下正则表达式函数之一来获取此列表)。我用Regex能够搜索每个字符串的这些信息。 3层正则表达式的功能是:还具有格式化这样的字典结合两个列表并通过引用对字典进行排序Python
def find_facility_name(incident):
pattern = re.compile(r'Subject:.*?for\s(.+?)\n')
findPat1 = re.search(pattern, incident)
facility_name = findPat1.group(1)
return facility_name
def find_date_of_incident(incident):
pattern = re.compile(r'Date of Incident:\s(.+?)\n')
findPat2 = re.search(pattern, incident)
incident_date = findPat2.group(1)
return incident_date
def find_facility_id(incident):
pattern = re.compile('(\d{3})\n')
findPat3 = re.search(pattern, incident)
f_id = findPat3.group(1)
return f_id
我:
d = {'001' : 'Facility #1', '002' : 'Another Facility'...etc.}
我想和排序键值在字典中结合两个列表,然后是事件发生日期。由于键值附加在设施名称上,因此应自动将来自同一设施的电子邮件分组在一起。为了做到这一点,我已经尝试使用这两个功能:
def get_facility_ids(incident_list):
'''(lst) -> lst
Return a new list from incident_list that inserts the facility IDs from the
get_facilities dictionary into each incident.
'''
f_id = []
for incident in incident_list:
find_facility_name(incident)
for k in d:
if find_facility_name(incident) == d[k]:
f_id.append(k)
return f_id
id_list = get_facility_ids(incident_list)
def combine_lists(L1, L2):
combo_list = []
for i in range(len(L1)):
combo_list.append(L1[i] + L2[i])
return combo_list
combination = combine_lists(id_list, incident_list)
def get_sort_key(incident):
'''(str) -> tup
Return a tuple from incident containing the facility id as the first
value and the date of the incident as the second value.
'''
return (find_facility_id(incident), find_date_of_incident(incident))
final_list = sorted(combination, key=get_sort_key)
这里是什么我的输入可能是一个例子,所需的输出:
d = {'001' : 'Facility #1', '002' : 'Another Facility'...etc.}
input: first_list = ['email_1', 'email_2', etc.]
first output: next_list = ['facility_id_for_1+email_1', 'facility_id_for_2 + email_2', etc.]
DESIRED OUTPUT: FINAL_LIST = sorted(next_list, key=facility_id, date of incident)
唯一的问题是,键值与每个单独的电子邮件字符串中找到的内容不匹配。有些DO,其他则完全是随机的。我不知道为什么会发生这种情况,但我有一种感觉,它与我将两个列表合并的方式有关。任何人都可以帮助这低n00b?谢谢!!!
的问题是有点难以理解的最后一个元素的列表。你能告诉我们一些示例输入,你得到的输出和你想要的输出吗? – stranac
你有一堆电子邮件,但你想与他们做什么?从中提取数据,替换一些代码并将结果输出到列表中? – RickyA
“我有两个列表 - 一个是包含电子邮件字符串,其中包含设施名称和事件发生日期。”好的,第二个列表呢?它看起来不像你在任何地方描述它。 – Kevin