Python 合并具有特定术语的两个词典数组

Python 合并具有特定术语的两个词典数组,python,Python,我有以下数据: { "color" : "black", "cars" : [{ "type": "mercedes", "number": 2131231 }, { "type": "BMW", "number": 453435 }], } 我有一个名为self.merged\u cars的字段。我想将车与合并的车合并,因此合并的车看起来像(合并的车目前是空的): merged\u cars字段将

我有以下数据:

{
    "color" : "black",
    "cars" : [{
        "type": "mercedes",
        "number": 2131231
    }, {
        "type": "BMW",
        "number": 453435
    }],
}
我有一个名为
self.merged\u cars
的字段。我想将
合并的车
合并,因此
合并的车
看起来像(
合并的车
目前是空的):

merged\u cars
字段将不包含重复项(相同的
类型
编号
颜色
)。我想做的是:

{k: v for d in (data['cars'] + self.merged_cars) for k, v in d.items()}
但看起来这不是正确的方法。有没有可能得到一个“干净的”,容易理解的方法的建议

编辑:一个更好的例子:

"merged_cars" : [{
    "type": "volkswagen",
    "number": 4354312,
    "color" : "white"
}, {
    "type": "BMW",
    "number": 453435,
    "color" : "black"
}]
以下各项的合并数据:

{
    "color" : "black",
    "cars" : [{
        "type": "mercedes",
        "number": 2131231
    }, {
        "type": "BMW",
        "number": 453435
    }],
}
将是:

"merged_cars" : [{
    "type": "volkswagen",
    "number": 4354312,
    "color" : "white"
}, {
    "type": "BMW",
    "number": 453435,
    "color" : "black"
},{
    "type": "mercedes",
    "number": 2131231,
    "color" : "black"
}]

注意
BMW
是重复的。

老实说,对于列表或词典理解来说,这太复杂了,最好还是用
for
循环学习

下面的代码应该可以做到这一点

from pprint import pprint as pp

merged_cars = [{
    "type": "volkswagen",
    "number": 4354312,
    "color": "white"
}, {
    "type": "BMW",
    "number": 453435,
    "color": "black"
}]

data = {
    "color": "black",
    "cars": [{
        "type": "mercedes",
        "number": 2131231
    }, {
        "type": "BMW",
        "number": 453435
    }],
}

data_color = data['color']
new_merged_cars_list = []
for car in data['cars']: # no need to merge merged_cars
    merged_car = {}
    for key, value in car.items():
        merged_car[key] = value
    merged_car['color'] = data_color
    if merged_car not in merged_cars:
        new_merged_cars_list.append(merged_car)

merged_cars.extend(new_merged_cars_list)

pp(merged_cars)
输出:

[{'color': 'white', 'number': 4354312, 'type': 'volkswagen'},
 {'color': 'black', 'number': 453435, 'type': 'BMW'},
 {'color': 'black', 'number': 2131231, 'type': 'mercedes'}]

我想我个人会将合并后的汽车编入字典,其中每个键都是一个字符串(颜色+数字+类型),值是汽车对象。然后添加新车数据既简单又快速,只需合并所有的车即可


请提供一份完整的表格;您还差几步,我们不必提供这些,也不必弄清楚您当前的代码是做什么的。顺便说一句,如果
merged\u cars
为空,则这是重新格式化,而不是合并。在我看来,您当前的代码未正确升级子目录字段。谢谢大家。我已经编辑了我的问题。
[{'color': 'white', 'number': 4354312, 'type': 'volkswagen'},
 {'color': 'black', 'number': 453435, 'type': 'BMW'},
 {'color': 'black', 'number': 2131231, 'type': 'mercedes'}]
merged_cars = { 
  "white4354312volkswagen": {
      "type": "volkswagen",
      "number": 4354312,
      "color" : "white"
    }, 
  "black453435BMW": {
    "type": "BMW",
    "number": 453435,
    "color" : "black"
  }
}

color = data["color"]
for car in data["cars"]:
  key = color + str(car['number']) + car['type']
  merged_cars[key] = car

print(merged_cars.values())