gpt4 book ai didi

python - 根据多个值的总和从字典中进行匹配

转载 作者:太空宇宙 更新时间:2023-11-03 21:30:25 25 4
gpt4 key购买 nike

我有两本词典如下。一个用于服务,另一个用于可以提供服务的供应商。每项服务可由多个供应商提供。

service = {'service1': {'serviceId': 's0001', 'cost': 220},
'service2': {'serviceId': 's0002', 'cost': 130}....}

supplier = {'supplier1': {'supplierId': 'sup1', 'bid': 30},
'supplier2': {'supplierId': 'sup2', 'bid': 12},
'supplier3': {'supplierId': 'sup3', 'bid': 30}....}

我想要一个新的字典,根据多个出价的总和大于或等于服务成本来匹配供应商的服务。类似的东西:

matched = {'service1': [sup1, sup2, sup100],
'service2': [sup20, sup64, sup200, sup224]....}

假设我们在两个词典中都有大量条目,那么对于这种所需的匹配有什么好方法呢?对能够提供单一服务的供应商数量没有限制。我厌倦了以下但没有工作。

match = {}

for key, value in service.items():
if service[key]['cost'] >= supplier[key]['bid']:
match[key] = [sup for sup in supplier[key]['supplierID']]

这是预期的输出:

matched = {'service1': [sup1, sup2, sup100], 'service2': [sup20, sup64, sup200, sup224]....}

最佳答案

我假设我们在两个词典中都有大量条目。这就是我解决问题的方法:

import numpy as np

# data
service = {'service1': {'serviceId': 's0001', 'cost': 12},
'service2': {'serviceId': 's0002', 'cost': 30}}
supplier = {'supplier1': {'supplierId': 'sup1', 'bid': 30},
'supplier2': {'supplierId': 'sup2', 'bid': 12},
'supplier3': {'supplierId': 'sup3', 'bid': 30}}

# lists of suppliers' IDs and bids
sups, bids = list(), list()
for key, info in supplier.items():
sups.append(info['supplierId'])
bids.append(info['bid'])

# sorted lists of suppliers' IDs and bids to allow binary search
bids, sups = zip(*sorted(zip(bids, sups)))

# main loop
matched = dict()
for key, info in service.items():
matched[key] = sups[:np.searchsorted(bids, info['cost'], side='right')]

匹配:

{'service1': ('sup2',), 'service2': ('sup2', 'sup1', 'sup3')}

此代码并未实现对新条目的轻松处理,但允许这样做。对于每个新的 service_record,我们必须执行一次二分搜索,对于每个新的 supplier_record,我们必须执行一次二分搜索和对 service 的循环> 更新匹配

根据具体要求和您用来存储数据的方式,代码可能并且应该得到改进。

关于python - 根据多个值的总和从字典中进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53557848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com