【发布时间】:2021-09-09 15:52:58
【问题描述】:
我在下面有一个字典列表:
d_dict = [
{'Abs Diff': 10,'Difference':10, 'Component': 'Local Market', 'Id':'123', 'Name': 'LAT', 'Executor':'AB'},
{'Abs Diff': 20,'Difference':20, 'Component': 'Local Market', 'Id':'123', 'Name': 'LAT', 'Executor':'B'},
{'Abs Diff': 30,'Difference':-30, 'Component': 'Local Market', 'Id':'123', 'Name': 'LAT', 'Executor':'BA'},
{'Abs Diff': 23,'Difference':23, 'Component': 'USD Market', 'Id':'456', 'Name': 'LAT', 'Executor':'CB'},
{'Abs Diff': 25,'Difference':25, 'Component': 'USD Market', 'Id':'456', 'Name': 'LAT', 'Executor':'C'},
{'Abs Diff': 48,'Difference':-48, 'Component': 'USD Market', 'Id':'456', 'Name': 'LAT', 'Executor':'CB'},
{'Abs Diff': 5,'Difference':5, 'Component': 'Price', 'Id':'123', 'Name': 'LAT', 'Executor':'AB'},
{'Abs Diff': 5,'Difference':5, 'Component': 'Price', 'Id':'123', 'Name': 'LAT', 'Executor':'B'},
{'Abs Diff': 10,'Difference':-10, 'Component': 'Price', 'Id':'123', 'Name': 'LAT', 'Executor':'BA'}
]
我的最终目标是有一个返回的字典:
result = [
{'Abs Diff': 10,'Difference':10, 'Component': 'Local Market', 'Id':'123', 'Name': 'LAT', 'Executor':'AB', 'Result':'Mismatched Executor'},
{'Abs Diff': 20,'Difference':20, 'Component': 'Local Market', 'Id':'123', 'Name': 'LAT', 'Executor':'B', 'Result':'Mismatched Executor'},
{'Abs Diff': 30,'Difference':-30, 'Component': 'Local Market', 'Id':'123', 'Name': 'LAT', 'Executor':'BA', 'Result':'Mismatched Executor'},
{'Abs Diff': 23,'Difference':23, 'Component': 'USD Market', 'Id':'456', 'Name': 'LAT', 'Executor':'CB', 'Result':'Mismatched Executor'},
{'Abs Diff': 25,'Difference':25, 'Component': 'USD Market', 'Id':'456', 'Name': 'LAT', 'Executor':'C', 'Result':'Mismatched Executor'},
{'Abs Diff': 48,'Difference':-48, 'Component': 'USD Market', 'Id':'456', 'Name': 'LAT', 'Executor':'CB', 'Result':'Mismatched Executor'},
{'Abs Diff': 5,'Difference':5, 'Component': 'Price', 'Id':'123', 'Name': 'LAT', 'Executor':'AB', 'Result':'Mismatched Executor'},
{'Abs Diff': 5,'Difference':5, 'Component': 'Price', 'Id':'123', 'Name': 'LAT', 'Executor':'B', 'Result':'Mismatched Executor'},
{'Abs Diff': 10,'Difference':-10, 'Component': 'Price', 'Id':'123', 'Name': 'LAT', 'Executor':'BA', 'Result':'Mismatched Executor'}
]
我想实现一个逻辑: 如果 Abs Diff 大于 0 并且如果组件、id、name 跨多个元素匹配,并且如果相同元素之间的差异之和小于 1 并且执行器在这些元素之间不同,则返回新的键值对“结果”:“不匹配”
我无法想象如何扫描列表中的多个字典并检查匹配的组件、ID 和名称。
【问题讨论】:
-
所有结果都显示不匹配
-
您可以使用 itertools.groupby 和一个键来选择您想要相同的元素
-
@Barmar 基于逻辑,每一个都应该根据组件、id和名称的分组不匹配(9个元素上的3个唯一分组)
-
如果您的示例还包括它们不不匹配的情况,那将会很有帮助。
-
虽然看起来@Barmar 和另一个用户要为你编写一些代码,但“告诉我如何解决这个编码问题”是off-topic for Stack Overflow。我们希望您发送honest attempt at the solution。 I downvoted your question because no attempt was made.
标签: python dictionary if-statement