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())