基于2个其他列表元素之间的值从列表返回值

时间:2017-06-01 12:40:06

标签: python

我正在处理一个项目,要求我根据从excel文件中提取的值将项目放在预定义的价格层中。除了最后一篇文章之外,我的脚本中还有其他所有内容。

我希望能够做的是构建一个列表列表(如果有更好/更有效的选项,则不会停留在数据结构上),检查值是否在i[0]和{之间{1}}并返回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']]}

以及返回&#39; Tier Undefined&#39;:

的示例行
    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])]

一般来说,似乎唯一获得肯定匹配的层是列表中的第一个字典值。

1 个答案:

答案 0 :(得分:0)

我认为你的清单有拼写错误,你打算写:

tiers = [[0,24.99,'0-24.99'],[25,49.99,'25-49.99]......]

然后你只需循环它们:

for tier in tiers:
    if tier[0] <= my_value <= tier[1]:
        selected_tier = tier[2]
        break