1

辞書の同じキーで、私はこの答えを見つけました

ただし、前の例の辞書を次の 2 つがあるかのようにマージしたいと考えています。

list_a = {'data' : [{'user__name': u'Joe', 'user__id': 1},
                    {'user__name': u'Bob', 'user__id': 3}]}
list_b = {'data' : [{'hours_worked': 25, 'user_num': 3},
                    {'hours_worked': 40, 'user_num': 1}]}

私は試した:

for (k,v) in list_a['data']:
    list_a['data'][k]['user_num'] = list_a['data'][k].pop('user__id')

しかし、私は得ました:ValueError: too many values to unpack

アップデート:

最終結果は次のようになります。

list_c = {'data' : [{'user__name': u'Joe', 'user_num': 1, 'hours_worked': 40},
                    {'user__name': u'Bob', 'user_num': 3, 'hours_worked': 25 }]}
4

3 に答える 3

1
>>> res = {d["user_num"]: d for d in list_b["data"]}
>>> for a in list_a["data"]:
...     res[a["user__id"]]["user__name"] = a["user__name"]
>>> list_c = {"data" : res.values()}

ただし、list_a のユーザーに対して list_b にユーザーが存在しない場合は、KeyError が発生します。

于 2013-07-30T14:36:49.203 に答える
1

その場合、最初に辞書を使用して ID を辞書にマップする必要があります。

result = {d['user__id': d for d in list_a}
for d in list_b:
    if d['user_num'] in result:
        result[d['user_num']].update(d)
于 2013-07-30T14:22:19.437 に答える
0

このようなもの?

list_a = [{'user__name': u'Joe', 'user__id': 1},
          {'user__name': u'Bob', 'user__id': 3}]
list_b = [{'hours_worked': 25, 'user_num': 3},
          {'hours_worked': 40, 'user_num': 1}]

worker_directory = dict()
for _dict in list_a:
    user_dict = dict()
    user_dict['user__id'] = _dict['user__id']
    worker_directory[_dict['user__name']] = user_dict

for _dict in list_b:
    for worker,worker_dict in worker_directory.items():
        if worker_dict['user__id'] == _dict['user_num']:
            worker_dict['hours_worked'] = _dict['hours_worked']


print worker_directory

Worker_directory は、値を持つワーカーのディクショナリです。ディクショナリには、ユーザー ID と作業時間が含まれています。

于 2013-07-30T14:26:35.127 に答える