示例词典
skus = (
{'sku': '53009', 'qtyonhand': '50'},
{'sku': '53004', 'qtyonhand': '20'},
{'sku': '53006', 'qtyonhand': '4'},
{'sku': '53007', 'qtyonhand': '500'},
{'sku': '53010', 'qtyonhand': '20'},
{'sku': '53013', 'qtyonhand': '40'},
{'sku': '53014', 'qtyonhand': '20'},
)
product_skus = [
{'sku': '53009', 'line_id': 75128133},
{'sku': '53004', 'line_id': 75453798},
{'sku': '53006', 'line_id': 75504454},
{'sku': '53007', 'line_id': 75504455},
{'sku': '53010', 'line_id': 75504457},
{'sku': '53013', 'line_id': 75504658},
{'sku': '53014', 'line_id': 75504659},
]
尝试在键值对的基础上合并两个词典。 需要基于SKU及其值合并两个字典
Expected Output:
merged_skus = (
{'sku': '53009', 'qtyonhand': '50', 'line_id': 75128133},
{'sku': '53004', 'qtyonhand': '20', 'line_id': 75453798},
{'sku': '53006', 'qtyonhand': '4', 'line_id': 75504454},
{'sku': '53007', 'qtyonhand': '500', 'line_id': 75504455},
{'sku': '53010', 'qtyonhand': '20', 'line_id': 75504457},
{'sku': '53014', 'qtyonhand': '20', 'line_id': 75504659},
{'sku': '53013', 'qtyonhand': '40', 'line_id': 75504658},
)
答案 0 :(得分:4)
您可以执行以下操作:
skus = (
{'sku': '53009', 'qtyonhand': '50'},
{'sku': '53004', 'qtyonhand': '20'},
{'sku': '53006', 'qtyonhand': '4'},
{'sku': '53007', 'qtyonhand': '500'},
{'sku': '53010', 'qtyonhand': '20'},
{'sku': '53013', 'qtyonhand': '40'},
{'sku': '53014', 'qtyonhand': '20'},
)
product_skus = [
{'sku': '53009', 'line_id': 75128133},
{'sku': '53004', 'line_id': 75453798},
{'sku': '53006', 'line_id': 75504454},
{'sku': '53007', 'line_id': 75504455},
{'sku': '53010', 'line_id': 75504457},
{'sku': '53013', 'line_id': 75504658},
{'sku': '53014', 'line_id': 75504659},
]
lookup = {element["sku"]: element for element in skus}
for product in product_skus:
lookup[product["sku"]].update(product)
result = tuple(lookup.values())
for element in result:
print(element)
输出
{'sku': '53009', 'qtyonhand': '50', 'line_id': 75128133}
{'sku': '53004', 'qtyonhand': '20', 'line_id': 75453798}
{'sku': '53006', 'qtyonhand': '4', 'line_id': 75504454}
{'sku': '53007', 'qtyonhand': '500', 'line_id': 75504455}
{'sku': '53010', 'qtyonhand': '20', 'line_id': 75504457}
{'sku': '53013', 'qtyonhand': '40', 'line_id': 75504658}
{'sku': '53014', 'qtyonhand': '20', 'line_id': 75504659}
作为替代:
lookup = {element["sku"]: element for element in skus}
result = tuple({**product, **lookup[product["sku"]]} for product in product_skus)
答案 1 :(得分:1)
我们可以制作一个字典来提高效率,从而可以使用以下命令查找给定sku
的第一个集合中的值:
skus_lookup = {
s['sku']: s for s in skus
}
result = tuple(
{**s, **skus_lookup[s['sku']] }
for s in product_skus
)
对于给定的样本数据,这给我们:
>>> pprint(result)
({'line_id': 75128133, 'qtyonhand': '50', 'sku': '53009'},
{'line_id': 75453798, 'qtyonhand': '20', 'sku': '53004'},
{'line_id': 75504454, 'qtyonhand': '4', 'sku': '53006'},
{'line_id': 75504455, 'qtyonhand': '500', 'sku': '53007'},
{'line_id': 75504457, 'qtyonhand': '20', 'sku': '53010'},
{'line_id': 75504658, 'qtyonhand': '40', 'sku': '53013'},
{'line_id': 75504659, 'qtyonhand': '20', 'sku': '53014'})
答案 2 :(得分:0)
您可以用熊猫来做
:import pandas as pd
df1=pd.DataFrame(skus)
df2=pd.DataFrame(product_skus)
df3=df1.merge(df2)
res=df3.to_dict(orient='records')
>>> print(res)
[{'sku': '53009', 'qtyonhand': '50', 'line_id': 75128133}, {'sku': '53004', 'qtyonhand': '20', 'line_id': 75453798}, {'sku': '53006', 'qtyonhand': '4', 'line_id': 75504454}, {'sku': '53007', 'qtyonhand': '500', 'line_id': 75504455}, {'sku': '53010', 'qtyonhand': '20', 'line_id': 75504457}, {'sku': '53013', 'qtyonhand': '40', 'line_id': 75504658}, {'sku': '53014', 'qtyonhand': '20', 'line_id': 75504659}]
或单行:
pd.DataFrame(skus).merge(pd.DataFrame(product_skus)).to_dict(orient='records')