Python合并两个嵌套字典,保留所有项目

时间:2018-02-24 08:09:18

标签: python python-3.x dictionary merge

我有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循环来完成。

1 个答案:

答案 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
  }
 }
}