我有(在我看来是)一个非常复杂的问题。我会尽量简洁——尽管为了完全理解这个问题,你可能需要点击我的个人资料并查看我在 StackOverflow 上发布的(只有其他)两个问题。简而言之:我有两个列表——一个由包含设施名称和事件日期的电子邮件字符串组成。另一个由每封电子邮件的设施 ID 组成(我使用以下正则表达式函数之一来获取此列表)。我使用 Regex 能够在每个字符串中搜索这些信息。3个正则表达式函数是:
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)
唯一的问题是,键值与在每个单独的电子邮件字符串中找到的内容不正确匹配。有些做,有些是完全随机的。我不知道为什么会发生这种情况,但我觉得这与我合并这两个列表的方式有关。谁能帮助这个卑微的n00b?谢谢!!!