3

我想创建一个“翻译器”类型的字典,它将作为嵌套的不同字典中的键的值分配给我创建的字典中的键。我遇到的问题是我无法创建一个表示嵌套字典键的值,而不必将其转换为字符串或其他数据类型,并且当我尝试使用字符串作为嵌套字典的索引时,我得到一个索引错误。理想情况下,我的 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]

嵌套的字典非常大,我只需要每个字段中的几个字段,否则我可以使用 .copy() 函数来处理旧的字典。

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 回答