3

ネストされた異なる辞書のキーである値を、作成した辞書のキーに割り当てる「翻訳者」タイプの辞書を作成したいと思います。私が遭遇する問題は、ネストされた dict キーを表す値を文字列または他のデータ型に変換しなければ作成できないことです。文字列をネストされた dict のインデックスとして使用しようとすると、インデックス エラーが発生します。理想的には、私の辞書は次のようになります。

new_dict{
    "new_key_1" : ['subdict1']['subdict2']['old_key_1'],
    "new_key_2" : ['subdict1']['subdict2']['old_key_2'],
    "new_key_3" : ['subdict1']['subdict3']['old_key_3']
    }

次に、ネストされた dict ごとに、単純な for ループを使用して新しい dict オブジェクトを生成できます。

for key, value in new_dict.items() :
    user_dict_1[key] = OldDict[value]

ネストされた dict は非常に大きく、それぞれからいくつかのフィールドしか必要としません。それ以外の場合は、.copy() 関数を使用して古い dict を操作できます。

PS-この質問をより読みやすく書き直すための助けもいただければ幸いです。

4

2 に答える 2

4

これが必要reduce()になります...

attrmap = {
  "new_key_1": ('subdict1', 'subdict2', 'old_key_1'),
   ...
}

print reduce(lambda x, y: x[y], attrmap[somekey], old_object)
于 2012-07-13T17:02:53.757 に答える
0

こんなこと言ってんの?

from pprint import pprint as pp
subdict1 = {'subdict1_item1':1, 'subdict1_item2':2}
subdict2 = {'subdict2_item1':3, 'subdict2_item2':4}
subdict3 = {'subdict3_item1': 5, 'subdict3_item1':6}
olddict = {
    'old_key_1': [subdict1, subdict2],
    'old_key_2': [subdict1, subdict2],
    'old_key_3': [subdict1, subdict3],
    }

newdict = {
    'new_key_1': olddict['old_key_1'].append('old_key_1'),
    'new_key_2': olddict['old_key_2'].append('old_key_2'),
    'new_key_3': olddict['old_key_3'].append('old_key_3'),
    }

またはこれ

newdict = {
    'new_key_1': 'old_key_1',
    'new_key_2': 'old_key_2',
    'new_key_3': 'old_key_3',
    }
def getnew(newkey, newdict, olddict):
    if newkey in newdict:
        oldkey = newdict[newkey]
        if oldkey in olddict:
            preitem = olddict[ oldkey ] # returns a list with two items
            item = []
            item.append([preitem[0]]) # makes subdict1 wrapped in a list
            item.append([preitem[1]]) # makes subdict2/3 wrapped in a list
            item.append([oldkey])
            return item
        else:
            raise KeyError('newdict has no matching olddict key')

結果:

pp( getnew('new_key_1', newdict, olddict) )
print 
pp( getnew('new_key_2', newdict, olddict) )
print
pp( getnew('new_key_3', newdict, olddict) )
[[{'subdict1_item1': 1, 'subdict1_item2': 2}],
 [{'subdict2_item1': 3, 'subdict2_item2': 4}],
 ['old_key_1']]

[[{'subdict1_item1': 1, 'subdict1_item2': 2}],
 [{'subdict2_item1': 3, 'subdict2_item2': 4}],
 ['old_key_2']]

[[{'subdict1_item1': 1, 'subdict1_item2': 2}],
 [{'subdict3_item1': 6}],
 ['old_key_3']]
于 2012-07-13T17:07:03.597 に答える