1

SQLクエリから取得した「注文」と「アイテム」のリストを整理しようとしています。

私のpythonリストには、注文に関係するユーザーが含まれています。各ユーザーには 1 つまたは n 個の注文があり、注文には 0 個または n 個のアイテムを含めることができます。次のようになります。

information = [
 {'item_id': 2,
  'item_name': 'glass',
  'order_id': 21,
  'uid': 1,
  'uname': 'john'},
 {'item_id': 3,
  'item_name': 'wine',
  'order_id': 21,
  'uid': 1,
  'uname': 'john'},
 {'item_id': 1,
  'item_name': 'napkin',
  'order_id': 12,
  'uid': 1,
  'uname': 'john'},
 {'item_id': 1,
  'item_name': 'napkin',
  'order_id': 12,
  'uid': 2,
  'uname': 'peter'}
 ... etc ...
 ]

私がしたいのは:

[{'orders': [{'items': [{'item_id': 2, 'item_name': 'glass'},
                        {'item_id': 3, 'item_name': 'wine'}],
              'order_id': 21},
             {'items': [{'item_id': 1, 'item_name': 'napkin'}],
              'order_id': 12}],
  'uid': 1,
  'uname': 'john'},
 {'uid': 2, 'uname': 'peter'} ... etc ... ]

ユーザーと注文を新しい結果リストに追加する最初のリストをループしようとしました。しかし、この新しいリストを更新したいときに困難に直面しています。その方法がわかりません。

おそらく、誰かがこの問題を解決するための手がかりや関連情報を持っていますか? どうもありがとう、

4

2 に答える 2

1

物事をそれほど深くネストする必要はありません。orderid をキーとする注文のディクショナリ、itemid をキーとするアイテムのディクショナリ、および userid をキーとするユーザーのディクショナリをすべて個別に作成します。ディクショナリ キーは、SQL テーブル キーに相当する Pythonic のようなものであり、おそらくこれらのそれぞれに対応するテーブルがあるように思えます。何とかしたい場合は、users と userorders をまとめることができます....

users = {1:'john'}
userorders = {1:[21]}
#goes to a list of item ids ONLY
orders = {21:[2,3]}
items = {2:'glass',3:'wine'}

あとは、アイテムを注文に追加し、注文をユーザーに追加するだけです。

SQL クエリを作成し、注文 Q を取得します。

users[Q['uid']] = Q['uname']
userorders[Q['uid']].append(Q['order_id'])
orders[Q['orderid']].append(Q['item_id'])
items[Q['item_id']] = Q['itemname']

john が注文した商品は次のとおりです。

for order in userorders[1]:
  for item in orders[order]:
    print items[item]
于 2013-10-16T13:57:08.307 に答える
0

最初に各エントリを反復処理してから、次のように項目をグループ化すると、各辞書の項目を再配置できると思いますorder_id

from collections import defaultdict

# information = [...]
result = {}

for entry in information:
    uid = entry['uid']
    order_id = entry['order_id']
    if not uid in result:
        result[uid] = {'uid': uid, 'uname': entry['uname'], 'orders': defaultdict(list)}

    result[uid]['orders'][order_id].append({
        'item_id': entry['item_id'],
        'item_name': entry['item_name']}
    )

for uid, value in result.iteritems():
    value['orders'] = [{'items': items, 'order_id': order_id} for order_id, items in value['orders'].iteritems()]
于 2013-10-16T14:39:37.293 に答える