1

顧客情報を保持するリストを取得しました。顧客リストの各項目は、それ自体がそれぞれの一連の情報のリストです。そう:

customers = [
  [customerID1, NameOfCustomer1, etc., 01 02 03] 
  [customerID2, NameOfCustomer2, etc., 02 05]
  .
  .
  .
  ]

各顧客の情報セット内の数字は、顧客を割り当てる必要があるカテゴリです。つまり、カテゴリごとに 1 つずつ、n 個のキーを持つ辞書があります。

dict = {
  01: [],
  02: [],
  03: [],
  04: [],
  05: []
  }

ここで、顧客 1 が最終的にカテゴリ 1、2、および 3 になり、顧客 2 が 2 および 5 になるように、顧客をそれぞれのカテゴリに割り当てる必要があります。もちろん、既存のカテゴリごとに 1 つずつ、n 個の if ステートメントを実行することもできますが、カテゴリの数が増えるにつれて、それはかなり気がかりです。したがって、私がやりたかったこと: 各顧客からカテゴリのリストを取得します。

for customer in customers:
  categories = re.findall(r'[0-9]{2}', customer[3])

簡単な部分はこれで終わりです。今、私は基本的にこの「カテゴリ」リストをループする方法を探しています:

for category in categories:
  dict[category].append(customer)

ただし、python は変数を使用してキーを選択することを好まないようです。おそらくこれにはばかげて簡単な解決策があります-私はそれを知りません。

皆様、本当にありがとうございました!

4

1 に答える 1

1

ステップ 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']}
于 2012-08-22T14:12:52.160 に答える