合并超过2个词典的斗争

时间:2017-08-25 12:30:45

标签: python dictionary merge

我有7个字典,我想将其中一个合并:

字典已经过单独测试,似乎都遵循相同的结构:

results1()=
{
 "NO4": 
  {
   "type_tests":
    {
     "test1":1.0,
     "test2":5.0,
     "test3":14.0
    }
  },
 "SO3": 
    {
     "type_tests":
    {"test1":1.0,
     "test2":5.0,
     "test3":14.0}
  }
}

results2()=
{
 "CO2": 
  {
   "type_tests":
    {
     "test1":10.0,
     "test2":51.0,
     "test3":34.0
    }
  },
 "H20": 
    {
     "type_tests":
    {"test1":1.0,
     "test2":5.0,
     "test3":14.0}
  }
}

我试图在这篇文章后合并7个词典:

How to merge two dictionaries in a single expression?

以我试过的方式合并以这种方式输出字典的函数:

merge_dictionaries={**results1(),**results2(),**results3(),**results4(),**results5(),**results6(),**results7()}
return merge_dictionaries

然而,当我运行合并字典时,它会输出:

TypeError: 'str' object is not a mapping

我也看过这篇文章merging "several" python dictionaries,我试过了:

dicts=[results1(),results2(),results3(),results4(),results5(),results6(),results7()]

for d in dicts:
    for k, v in d.iteritems():
        super_dict[k].add(v)
    return superdict

然而输出results7()字典并保持思考(好像它应该输出其他东西但不输出)

使用2个词典的所需输出将是合并的词典:

{
"NO4": 
    {
    "type_tests":
        {
         "test1":1.0,
         "test2":5.0,
         "test3":14.0
        }
     },
 "SO3": 
     {
    "type_tests":
        {
         "test1":1.0,
         "test2":5.0,
         "test3":14.0
        }
      },
"CO2": 
      {
     "type_tests":
        {
        "test1":10.0,
        "test2":51.0,
        "test3":34.0
      }
     },
 "H20": 
      {
      "type_tests":
       {
        "test1":1.0,
        "test2":5.0,
        "test3":14.0
    }
  }
}

我怎样才能获得一个合并7个单词词典的超级词典?

2 个答案:

答案 0 :(得分:0)

我真的不知道我是否理解你的问题,但这可能是一个解决方案:

dicts=[results1(),results2(),results3(),results4(),results5(),results6(),results7()]

merge_dictionaries = {k: v for d in dicts for k,v in d.items()}

很高兴知道一个清晰而简短但完整的输入和输出示例。

我猜更多的pythonic unpacking解决方案对你不起作用,因为你使用的是Python< 3.5。

答案 1 :(得分:0)

输出相应字典的函数是type str因此我尝试的是在Ignacio Vazquez艾布拉姆斯的帮助下获取每个函数并将它们转换为jsons他在这篇文章中的回应Convert string to JSON using Python

format_results1=json.loads(results1())
format_results2=json.loads(results2())

这样做后,我使用了@ gsi-frank响应,在dicts列表中插入了format_results。 最后我获得了合并的词典。

简而言之,问题是字典的type,我将它们转换为json然后能够将它们合并在一起。

感谢所有花时间阅读我的帖子和提供答案的人。