ステップ 1 は、これらのフラット リストをディクショナリに変換することです。これは、プロパティへのアクセスにより便利です。データが実際にどのように見えるかを想像する必要がありましたが、アイデアを得る必要があります。
>>> customers = [
... ['customerID1', 'NameOfCustomer1', 'e','t','c', '01 02 03'],
... ['customerID2', 'NameOfCustomer2', 'e','t','c', '02 05']
... ]
>>>
>>> cust_keys = ('id', 'name', 'q1','q2','q3','categories')
>>> cdicts = [dict(zip(cust_keys, cust_vals)) for cust_vals in customers]
>>> cdicts
[{'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer1', 'id': 'customerID1', 'categories': '01 02 03'}, {'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer2', 'id': 'customerID2', 'categories': '02 05'}]
カテゴリをコードのリストとして持つ方が良いでしょう。そのための正規表現は必要ありません。
>>> for cdict in cdicts:
... cdict['categories'] = cdict['categories'].split()
...
>>> cdicts
[{'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer1', 'id': 'customerID1', 'categories': ['01', '02', '03']}, {'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer2', 'id': 'customerID2', 'categories': ['02', '05']}]
ここで、一連のカテゴリ リストに追加するために、キーが存在するかどうかを毎回確認し、存在しない場合は空のリストを作成するか、defaultdict
それを処理する which を使用できます。
>>> from collections import defaultdict
>>> by_categories = defaultdict(list)
>>> for customer in cdicts:
... for category in customer['categories']:
... by_categories[category].append(customer)
...
生産する
>>> for k in sorted(by_categories):
... print 'category', k, 'contains:'
... for v in by_categories[k]:
... print v
...
category 01 contains:
{'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer1', 'id': 'customerID1', 'categories': ['01', '02', '03']}
category 02 contains:
{'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer1', 'id': 'customerID1', 'categories': ['01', '02', '03']}
{'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer2', 'id': 'customerID2', 'categories': ['02', '05']}
category 03 contains:
{'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer1', 'id': 'customerID1', 'categories': ['01', '02', '03']}
category 05 contains:
{'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer2', 'id': 'customerID2', 'categories': ['02', '05']}