【问题标题】:Python Merge two nested dictionary keeping all itemsPython合并两个嵌套字典,保留所有项目
【发布时间】:2018-02-24 08:09:18
【问题描述】:

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

【问题讨论】:

  • 您的预期结果是由具有重复键的字典组成的!!!
  • @Jean-FrançoisFabre 是的。或者,如果我可以在一次设置中整理相同键的值。
  • @liliscent 我也试过这个 - d1 = {**d, **d1} 。但同样的输出。
  • 我建议你 edit 你的问题然后显示预期的输出
  • @Jean-FrançoisFabre 完成

标签: python python-3.x dictionary merge


【解决方案1】:

你过于复杂了。所有默认的默认设置只需要 1 个字典,从而轻松创建预期结果:

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

【讨论】:

  • 从前两天开始我就想多了。非常感谢让。
猜你喜欢
  • 1970-01-01
  • 2022-12-18
  • 2023-03-28
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 2020-11-28
  • 2023-03-30
  • 2021-01-31
相关资源
最近更新 更多