3

それぞれの辞書に共通のキー名を持つ2つの別々のPythonリストがあります。呼び出された2番目のリストrecordListには、最初のリストに追加したい同じキー名の複数の辞書がありますclientList。リストの例は次のとおりです。

clientList = [{'client1': ['c1','f1']}, {'client2': ['c2','f2']}]
recordList = [{'client1': {'rec_1':['t1','s1']}}, {'client1': {'rec_2':['t2','s2']}}]

したがって、最終結果は次のようになり、レコードは内の複数の辞書の新しいリストに含まれるようになりclientListます。

 clientList = [{'client1': [['c1','f1'], [{'rec_1':['t1','s1']},{'rec_2':['t2','s2']}]]}, {'client2': [['c2','f2']]}]

簡単そうに見えますが、変数を使用してこれらの辞書の両方を繰り返し、一致する場所を見つける方法を見つけるのに苦労しています。

4

3 に答える 3

7

確かな場合は、両方の辞書でキー名が同じであることを確認してください。

    clientlist = dict([(k, [clientList[k], recordlist[k]]) for k in clientList])

ここみたいに:

    >>> a = {1:1,2:2,3:3}
    >>> b = {1:11,2:12,3:13}
    >>> c = dict([(k,[a[k],b[k]]) for k in a])
    >>> c
    {1: [1, 11], 2: [2, 12], 3: [3, 13]}
于 2012-05-16T21:13:03.300 に答える
1

2つのリストの各キーに対応する値のリストが必要な場合は、これを開始点として試してください。

from pprint import pprint

clientList = [{'client1': ['c1','f1']}, {'client2': ['c2','f2']}]
recordList = [{'client1': {'rec_1':['t1','s1']}}, {'client1': {'rec_2':['t2','s2']}}]
clientList.extend(recordList)

outputList = {}

for rec in clientList:
    k = rec.keys()[0]
    v = rec.values()[0]
    if k in outputList:
        outputList[k].append(v)
    else:
        outputList[k] = [v,]

pprint(outputList)

これを生成します:

{'client1': [['c1', 'f1'], {'rec_1': ['t1', 's1']}, {'rec_2': ['t2', 's2']}],
 'client2': [['c2', 'f2']]}
于 2012-05-16T20:44:48.263 に答える
1

これは機能する可能性がありますが、データ構造のルールを理解しているかどうかはわかりません。

# join all the dicts for better lookup and update
clientDict = {}
for d in clientList:
    for k, v in d.items():
        clientDict[k] = clientDict.get(k, []) + v

recordDict = {}
for d in recordList:
    for k, v in d.items():
        recordDict[k] = recordDict.get(k, []) + [v]

for k, v in recordDict.items():
    clientDict[k] = [clientDict[k]] + v

# I don't know why you need a list of one-key dicts but here it is
clientList = [dict([(k, v)]) for k, v in clientDict.items()]

あなたが提供したサンプルデータで、これはあなたが望む結果を与えます、それが役立つことを願っています。

于 2012-05-16T21:32:02.027 に答える