python动态创建dict of dict

python动态创建dict of dict,python,loops,dictionary,Python,Loops,Dictionary,首先,我找不到任何建议来解决我下面的问题,所以如果有人已经回答了,请友好地告诉我 我试图“动态”创建一个由其他字典组成的字典(最后这些字典是通过json获得的数据);无论如何,我试图达到的结果如下: { 'D2Key1': {'D1Key1': 'Data11', 'D1Key2': 'Data21', 'D1Key3': 'Data31'}, 'D2Key2': {'D1Key1': 'Data12', 'D1Key2': 'Data22', 'D1Key3': 'Data32'}, 'D2

首先,我找不到任何建议来解决我下面的问题,所以如果有人已经回答了,请友好地告诉我

我试图“动态”创建一个由其他字典组成的字典(最后这些字典是通过json获得的数据);无论如何,我试图达到的结果如下:

{
'D2Key1': {'D1Key1': 'Data11', 'D1Key2': 'Data21', 'D1Key3': 'Data31'}, 
'D2Key2': {'D1Key1': 'Data12', 'D1Key2': 'Data22', 'D1Key3': 'Data32'},
'D2Key3': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'}
}
我写的代码是:

for n in range(3):
    D1['D1key1'] = pjson['jsonkey1'][n]['jsonkey4'] # Data1n
    D1['D1key2'] = pjson['jsonkey2'][n]['jsonkey5'] # Data2n
    D1['D1key3'] = pjson['jsonkey3'][n]['jsonkey6'] # Data3n

    D2['%s%d' % ('D2key', n+1)] = D1
我得到的结果是一个包含三个字典的字典,但它们都有相同的数据,都是上一次迭代的数据,换句话说,类似这样:

{
'D2Key1': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'}, 
'D2Key2': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'},
'D2Key3': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'}
}
for n in range(3):
    D1 = {}
    D1['D1key1'] = pjson['jsonkey1'][n]['jsonkey4'] # Data1n
    D1['D1key2'] = pjson['jsonkey2'][n]['jsonkey5'] # Data2n
    D1['D1key3'] = pjson['jsonkey3'][n]['jsonkey6'] # Data3n

    D2['%s%d' % ('D2key', n+1)] = D1
有人能告诉我正确的方向吗?
谢谢

是的,如果这样做,每次通过后都必须重置D1,否则指针保持不变,并且D2中的所有键都指向相同的D1。以下是如何解决这个问题:

for n in range(3):
    D1 = {}
    D1['D1key1'] = pjson['jsonkey1'][n]['jsonkey4'] # Data1n
    D1['D1key2'] = pjson['jsonkey2'][n]['jsonkey5'] # Data2n
    D1['D1key3'] = pjson['jsonkey3'][n]['jsonkey6'] # Data3n

    D2['%s%d' % ('D2key', n+1)] = D1

这是一个常见的错误。D2中的每个关键点都被指定给同一对象D1。然后在每次迭代中不断修改D1


您希望在每次迭代中分配不同的字典。将
D1={}
添加到for循环的第一行

这可能是因为您在for循环中引用了相同的dict D1。我认为您必须在每次迭代中创建新的dict。大概是这样的:

{
'D2Key1': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'}, 
'D2Key2': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'},
'D2Key3': {'D1Key1': 'Data13', 'D1Key2': 'Data23', 'D1Key3': 'Data33'}
}
for n in range(3):
    D1 = {}
    D1['D1key1'] = pjson['jsonkey1'][n]['jsonkey4'] # Data1n
    D1['D1key2'] = pjson['jsonkey2'][n]['jsonkey5'] # Data2n
    D1['D1key3'] = pjson['jsonkey3'][n]['jsonkey6'] # Data3n

    D2['%s%d' % ('D2key', n+1)] = D1
这条线

 D2['%s%d' % ('D2key', n+1)] = D1
这是错误的。您总是指向字典,它是一种可变类型。您需要先复制结果并将其添加到字典D2中

for n in range(3):
    d1 = {}  # notice here this is what you need to add.
    d1['D1key1'] = pjson['jsonkey1'][n]['jsonkey4'] # Data1n
    d1['D1key2'] = pjson['jsonkey2'][n]['jsonkey5'] # Data2n
    d1['D1key3'] = pjson['jsonkey3'][n]['jsonkey6'] # Data3n
    d2['%s%d' % ('D2key', n+1)] = d1
尝试在每个循环中创建一个新字典,填充键,然后将其添加到字典D2

for n in range(3):
    d1 = {}  # notice here this is what you need to add.
    d1['D1key1'] = pjson['jsonkey1'][n]['jsonkey4'] # Data1n
    d1['D1key2'] = pjson['jsonkey2'][n]['jsonkey5'] # Data2n
    d1['D1key3'] = pjson['jsonkey3'][n]['jsonkey6'] # Data3n
    d2['%s%d' % ('D2key', n+1)] = d1

pjson到底是什么?感谢Eli对您和所有其他人的及时回复。r08y