私は(私には)かなり複雑な問題を抱えています。できるだけ簡潔にしようと思いますが、問題を完全に理解するには、プロフィールをクリックして、StackOverflowに投稿した(他の)2つの質問を確認する必要があるかもしれません。つまり、2つのリストがあります。1つは施設名とインシデントの日付を含む電子メール文字列で構成されています。もう1つは、各電子メールのファシリティ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.}
2つのリストを組み合わせて、辞書のキー値、続いてインシデントの日付で並べ替えようとしています。キー値は施設名に添付されているため、これにより、同じ施設からの電子メールが自動的にグループ化されます。そのために、次の2つの関数を使用してみました。
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、その他は完全にランダムです。なぜこれが起こっているのかわかりませんが、2つのリストを組み合わせる方法と関係があると感じています。誰かがこの低いn00bを助けることができますか?ありがとう!!!