[英]Merge dictionaries in a list on common key-value
What is the pythonic way to properly merge dictionaries in a list Given list of dictionaries:在列表中正确合并字典的pythonic方法是什么给定的字典列表:
[
{
"introduced_at": "28.12.2000",
"item": "Pizza",
"item_price": [
{
"date": "01.01.2011",
"details": [
{"price": 1000, "changed_by": "Dieter"},
{"price": 900, "changed_by": "Nina"},
],
}
],
},
{
"introduced_at": "28.12.2000",
"item": "Pizza",
"item_price": [
{
"date": "01.01.2012",
"details": [
{"price": 1050, "changed_by": "Dieter"},
{"price": 900, "changed_by": "Nina"},
],
}
],
},
]
expected:预期的:
{
"price_dev": [
{
"introduced_at": "28.12.2000",
"item": "Pizza",
"item_price": [
{
"date": "01.01.2011",
"details": [
{"price": 1000, "changed_by": "Dieter"},
{"price": 900, "changed_by": "Nina"},
],
},
{
"date": "01.01.2012",
"details": [
{"price": 1050, "changed_by": "Dieter"}
],
},
],
}
]
}
The key item
and its value in combination with their introduced_at
can be found twice in the list so they may be used as unique idenfitiers to merge the entries on.可以在列表中找到两次键item
及其值及其introduced_at
的值,因此它们可以用作合并条目的唯一标识符。 As for the details, since date
are both different, they should be displayed seperately.至于细节,由于date
不同,应该分开显示。 Duplicates as seen in changed_by
Nina should be disregarded.在changed_by
Nina 中看到的重复应该被忽略。
I have tried this.我试过这个。 can you check it is correct or not.你能检查它是否正确。
dl = [
{
"introduced_at": "28.12.2000",
"item": "Pizza",
"item_price": [
{
"date": "01.01.2011",
"details": [
{"price": 1000, "changed_by": "Dieter"},
{"price": 900, "changed_by": "Nina"},
],
}
],
},
{
"introduced_at": "28.12.2000",
"item": "Pizza",
"item_price": [
{
"date": "01.01.2012",
"details": [
{"price": 1050, "changed_by": "Dieter"},
{"price": 900, "changed_by": "Nina"},
],
}
],
},
]
ans_dict = {}
pre_list = []
for data in dl:
if not pre_list:
pre_list.append(data)
else:
for items, index in zip(pre_list, range(len(pre_list))):
if items['introduced_at'] == data['introduced_at'] and items['item'] == data['item']:
for item_data in data['item_price']:
for old_items in items['item_price']:
if item_data['date'] != old_items['date']:
pairs = zip(item_data['details'], old_items['details'])
add_dic = [x for x, y in pairs if x != y]
items['item_price'].append({"date": item_data['date'], "details": add_dic})
ans_dict["price_dev"] = pre_list
print(ans_dict)
output: output:
{
'price_dev': [
{
'introduced_at': '28.12.2000',
'item': 'Pizza',
'item_price': [
{
'date': '01.01.2011',
'details': [
{
'price': 1000,
'changed_by': 'Dieter'
},
{
'price': 900,
'changed_by': 'Nina'
}
]
},
{
'date': '01.01.2012',
'details': [
{
'price': 1050,
'changed_by': 'Dieter'
}
]
}
]
}
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.