在具有多个或多个条件的Python对象中查找字符串

2024-09-30 04:28:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图控制一个对象中的许多变量。为此,我希望查看对象中是否存在某些单词:

jobs = csv.DictReader(open("jobsFile.csv", "rb"))
jobsWithRoles = []

for i in jobs:
     if "Clerk" or "Stock" or "Sales" in jobs['Roles']:
          i["RoleNum"] = 1
          jobsWithRoles.append(i)
elif "Janitor" or "President" or "Driver" in jobs["Roles"]:
         i["RoleNum"] = 2
         jobsWithRoles.append(i)
else:
         i["RoleNum"] = 5
         jobsWithRoles.append(i)

问题是,无论字符串是否存在,所有内容都被分配为“1”。你知道吗


Tags: orcsv对象inforjobsopen单词
3条回答

问题是你的第一个条件总是会被评估为真。你知道吗

if "Clerk" or "Stock" or "Sales" in jobs['Roles']

所以,你是说:如果“职员”是真的或“股票”是真的,等等。你知道吗

Python将任何与“”不同的字符串求值为true。你知道吗

我建议您使用如下函数:

def search_in_jobs(words, jobs):
    for w in words:
        if w in jobs: return True
    return False

然后重写条件:

if search_in_jobs(["Clerk", "Stock", "Sales"], jobs)

首先,我假设你的缩进不好,你的意思是elifelse对应于if。你知道吗

if中的第一个条件是"Clerk",它的计算结果总是True,就像所有字符串一样。 看看这个:

>>> d = dict()
>>> if "string" or "NOT THERE!" in d:
...     print("Hello world!")
... 
Hello world!

This可能是一个解决方案。你知道吗

现在,您的代码的计算方式如下:

if ("Clerk") or ("Stock") or ("Sales" in jobs['Roles']):

此外,由于在Python中非空字符串的计算结果为True,if语句将始终传递,因为它正在计算非空字符串。你知道吗

我想你的意思是:

# Notice how I replaced `jobs['Roles']` with `i['Roles']`
if "Clerk" in i['Roles'] or "Stock" in i['Roles'] or "Sales" in i['Roles']:

或者,你可以这样做:

if any(x in i['Roles'] for x in ("Clerk", "Stock", "Sales")):

哪个更干净。你知道吗

相关问题 更多 >

    热门问题