我有一个项目,我正在研究这个项目,需要我根据从Excel文件中拉出的值,将项目放置在预定义的价格层中。除了最后一部分之外,我的脚本中还有其他一切工作。从列表中返回值基于2个其他列表元素之间的值返回值
我希望能够做的是建立名单(不停留在是否有更好/更有效的选择数据结构)的列表,请检查该值i[0]
和i[1]
,并返回i[2]
之间。
例子是:
my_value = 22.99
[[0],[24.99],['0-24.99'],[25,49.99,'25-49.99]......]
所需的输出:'0-24.99'
编辑:
现在,我回到我的电脑,我写出来的代码,试图拉这个关闭。
这些函数用于计算并匹配层。
#define functions
#calculate Eligible Average Selling Price
def asp(x,y):
if float(y)==0:
return 0
else:
return float(x)/float(y)
#Search Tiers Dictionary and return undefined if tier does not exist
def inTier(x,y,z):
for t in Tiers[x]:
if float(t[0]) <= asp(y,z) <= float(t[1]):
return t[2]
else:
return 'Tier Undefined'
这是我正在循环匹配层的字典。
Tiers= {'Desktop':[[0, 24.99, '0-24.99'],[25, 49.99, '25-49.99'],[50, 74.99, '50-74.99'],[75, 99.99, '75-99.99'],[100, 124.99, '100-124.99'],[125, 149.99, '125-149.99'],[150, 199.99, '150-199.99'],[200, 249.99, '200-249.99'],[250, 299.99, '250-299.99'],[300, 499.99, '300-499.99'],[500, 749.99, '500-749.99'],[750, 999.99, '750-999.99'],[1000, 1999.99, '1000-1999.99'],[2000, 2999.99, '2000-2999.99'],[3000, 9999.99, '3000-9999.99']],'Chair':[[0, 24.99, '0-24.99'],[25, 49.99, '25-49.99'],[50, 74.99, '50-74.99'],[75, 99.99, '75-99.99'],[100, 124.99, '100-124.99'],[125, 149.99, '125-149.99'],[150, 199.99, '150-199.99'],[200, 249.99, '200-249.99'],[250, 299.99, '250-299.99'],[300, 499.99, '300-499.99'],[500, 749.99, '500-749.99'],[750, 999.99, '750-999.99'],[1000, 1999.99, '1000-1999.99'],[2000, 2999.99, '2000-2999.99'],[3000, 9999.99, '3000-9999.99']],'Gear':[[0, 9.99, '0-9.99'],[10, 24.99, '10-24.99'],[25, 49.99, '25-49.99'],[50, 74.99, '50-74.99'],[75, 99.99, '75-99.99'],[100, 124.99, '100-124.99'],[125, 149.99, '125-149.99'],[150, 199.99, '150-199.99'],[200, 249.99, '200-249.99'],[250, 299.99, '250-299.99'],[300, 349.99, '300-349.99'],[350, 399.99, '350-399.99'],[400, 499.99, '400-499.99'],[500, 749.99, '500-749.99'],[750, 999.99, '750-999.99'],[1000, 1999.99, '1000-1999.99'],[2000, 2999.99, '2000-2999.99'],[3000, 9999.99, '3000-9999.99']],'Laptop':[[0, 49.99, '0-49.99'],[50, 99.99, '50-99.99'],[100, 149.99, '100-149.99'],[150, 199.99, '150-199.99'],[200, 249.99, '200-249.99'],[250, 299.99, '250-299.99'],[300, 349.99, '300-349.99'],[350, 399.99, '350-399.99'],[400, 449.99, '400-449.99'],[450, 549.99, '450-549.99'],[550, 649.99, '550-649.99'],[650, 749.99, '650-749.99'],[750, 999.99, '750-999.99'],[1000, 4999.99, '1000-1999.99'],[2000, 6999.99, '2000-6999.99']],'Printer':[[0, 24.99, '0-24.99'],[25, 49.99, '25-49.99'],[50, 74.99, '50-74.99'],[75, 99.99, '75-99.99'],[100, 124.99, '100-124.99'],[125, 149.99, '125-149.99'],[150, 199.99, '150-199.99'],[200, 249.99, '200-249.99'],[250, 299.99, '250-299.99'],[300, 499.99, '300-499.99'],[500, 749.99, '500-749.99'],[750, 999.99, '750-999.99'],[1000, 1999.99, '1000-1999.99'],[2000, 2999.99, '2000-2999.99'],[3000, 9999.99, '3000-9999.99']],'Tablet':[[0, 49.99, '0-49.99'],[50, 99.99, '50-99.99'],[100, 149.99, '100-149.99'],[150, 199.99, '150-199.99'],[200, 249.99, '200-249.99'],[250, 299.99, '250-299.99'],[300, 349.99, '300-349.99'],[350, 399.99, '350-399.99'],[400, 449.99, '400-449.99'],[450, 549.99, '450-549.99'],[550, 649.99, '550-649.99'],[650, 749.99, '650-749.99'],[750, 999.99, '750-999.99'],[1000, 1999.99, '1000-1999.99'],[2000, 4999.99, '2000-4999.99']]}
,这里是其中值正被从列表行计算成一个列表行
row=[row[0],row[1].split(" ")[1],row[2].split(" ")[1],int(re.findall(r'\d+', row[3])[0]),row[4],row[5],row[6],asp(row[5],row[6]),inTier(row[0],row[5],row[6])]
和示例行被返回“层未定义”:
['Gear', 'REGION 27 SOUTHEAST', 'DISTRICT 7 E ATL', 'LOGANVILLE GA (6852)', 'WNDA3100 RANGEMAX', '32.99', '1']
在一般来说,看起来只有正确匹配的唯一层次是列表字典值列表中的第一个。
为什么在不同的子阵列第3,但下一个组是在一个单独的子数组中? – Barmar
'如果我[0] <= my_value <= i [1]:return i [2]' – Barmar
@Barmar在我的方面缺乏清晰度。在循环中,它将以类似于i的方式开始: –