我有python 3.5。尝试合并两个嵌套字典并将结果集作为" union all"这两个词。这是我的代码
from collections import defaultdict, Counter
import json
from itertools import chain
d = ''
d1 = ''
d1 = defaultdict(lambda: defaultdict(dict))
def CreateDataSet(koin, order, key, value):
global d, d1
d = defaultdict(lambda: defaultdict(dict))
d[koin][order][key] = value
d1 = dict(chain(d.items(), d1.items()))
CreateDataSet('BTC', 'Buy', 'BTZeB', 76000)
CreateDataSet('LTC', 'Buy', 'LTKoB', 6000)
CreateDataSet('LTC', 'sell', 'LTZeS', 6050)
CreateDataSet('OMG', 'Buy', 'OGDeB', 9000)
CreateDataSet('OMG', 'Buy', 'OGKoB', 9100)
print(json.dumps(d1))
我期待这样的结果 -
{
"BTC": {
"Buy": {
"BTZeB": 76000
}
},
"LTC": {
"Buy": {
"LTKoB": 6000
},
"sell": {
"LTKoS": 6050
}
},
"OMG": {
"Buy": {
"OGDeB": 9000,
"OGKoB": 9100
}
}
}
但是,我会这样 -
{
"LTC": {
"Buy": {
"LTKoB": 6000
}
},
"OMG": {
"Buy": {
"OGDeB": 9000
}
},
"BTC": {
"Buy": {
"BTZeB": 76000
}
}
}
任何其他方法将不胜感激。同时,我也试图弄清楚如何使用for循环来完成。
答案 0 :(得分:1)
你过度复杂了。所有默认违约都只需要1个dict,这样可以毫不费力地创建预期的结果:
from collections import defaultdict
import json
d = defaultdict(lambda: defaultdict(dict))
def CreateDataSet(koin, order, key, value):
d[koin][order][key] = value
CreateDataSet('BTC', 'Buy', 'BTZeB', 76000)
CreateDataSet('LTC', 'Buy', 'LTKoB', 6000)
CreateDataSet('LTC', 'sell', 'LTZeS', 6050)
CreateDataSet('OMG', 'Buy', 'OGDeB', 9000)
CreateDataSet('OMG', 'Buy', 'OGKoB', 9100)
print(json.dumps(d, indent=True)) #bracket change
结果:
{
"BTC": {
"Buy": {
"BTZeB": 76000
}
},
"LTC": {
"sell": {
"LTZeS": 6050
},
"Buy": {
"LTKoB": 6000
}
},
"OMG": {
"Buy": {
"OGKoB": 9100,
"OGDeB": 9000
}
}
}