在python中使用dict键作为不同字典中的值
问题描述:
我想创建一个“转换器”类型的dict,它将赋值为嵌套的不同字符中的键,并将其转换为我创建的字典中的键。我遇到的问题是,我无法创建一个代表嵌套字典密钥的值,而无需将其转换为字符串或其他数据类型,并且当我尝试将字符串用作嵌套字典的索引时,我收到一个索引错误。理想情况下,我的字典会是这个样子:在python中使用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 key, value in new_dict.items() :
user_dict_1[key] = OldDict[value]
嵌套类型的字典是非常大的我只需要从每个字段中选择几个字段,否则我可以使用.copy()函数来处理旧的字典。
PS-任何帮助改写这个问题更可读性也值得赞赏。
答
你会需要reduce()
这一个...
attrmap = {
"new_key_1": ('subdict1', 'subdict2', 'old_key_1'),
...
}
print reduce(lambda x, y: x[y], attrmap[somekey], old_object)
答
你说这样的事情?
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']]
当你说'[ 'subdict1'] [ 'subdict2'] [ 'old_key_1']'你的意思是像一个嵌套字典 - >'{'subdict1':{'subdict2':'old_key_1'}}'或者一系列的字典?我没有那么好。如果你可以发布为什么你想要这样做,我们可以以不同的方式帮助你(也许更简单的方法)来处理你的问题 – Hassek 2012-07-13 16:53:44
是的,它是一个嵌套的字典,但old_key_1是一个键 - 就像{'subdict1':{subdict2:{ old_key_1:some_value,old_key_2:some_other value}}}。它实际上是一个在Python中转换为字典的JSON-rpc对象。 – paulski 2012-07-13 19:51:43