在dict中查找值为列表的项目

时间:2015-03-05 10:14:22

标签: python excel list dictionary

我有一张我从excel表中填写的词典。然后,我想知道dict的值中是否存在字符串。每个键的值都是一个列表。

import xlrd
wb=xlrd.open_workbook('C:\\Inputs_UNF_newForm.xlsx')
p=wb.sheet_by_name('Products')

def isProduct(look_for):
    Product = {}
    Keep = []

    (start,end)= rowMatrix("Products")
    number_of_columns=p.ncols
    for row in range(start,end):
        key = str(p.cell(row,0).value)
        Keep=[]
        for col in range(1,number_of_columns):
            value  = str((p.cell(row,col).value))
            if value !="":
                Keep.append(value)
        Product[key] = Keep
    print(Product)
    for value in Product.values(): #Doesn't work :(
        if look_for == value:
            return "yey"
    return "nop"

我的问题是:    - 有没有办法让值只是值而不是值列表?    - 即使我正在寻找的字符串确实存在于其中一个列表中,该函数返回“nop”,为什么?

谢谢!

2 个答案:

答案 0 :(得分:6)

您可以使用in运算符:

if look_for in value:

答案 1 :(得分:3)

使用Python的in运算符:

In [1]: values = ['one', 'two', 'three']
In [2]: 'one' in values
Out[2]: True
In [3]: 'someone' in values
Out[3]: False 

更新PM_2Ring的评论:以下代码检查字符串是否是列表中任何值的子字符串:

In [8]: a = lambda s, v: bool(len([ss for ss in v if s in ss]))
In [9]: a('one', values)
Out[9]: True
In [10]: a('someone', values)
Out[10]: False
In [11]: a('ree', values) #PM 2Ring comment
Out[11]: True
In [12]: a('Tree', values)
Out[12]: False
In [13]: a('tree', values)
Out[13]: False

详细了解列表推导here