我正在尝试控制对象中的许多变量。为此,我希望查看对象中是否存在某些单词:
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”。
答案 0 :(得分:1)
现在,您的代码正在评估如下:
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")):
更干净。
答案 1 :(得分:1)
首先,我认为您的缩进很糟糕,您认为elif
和else
与if
对应。
if
中的第一个条件是"Clerk"
,它总是评估为True
,就像所有字符串一样。
看看这个:
>>> d = dict()
>>> if "string" or "NOT THERE!" in d:
... print("Hello world!")
...
Hello world!
This可能是一种解决方案。
答案 2 :(得分:0)
问题在于,您始终将第一个条件评估为True。
if "Clerk" or "Stock" or "Sales" in jobs['Roles']
所以,你说的是:如果“职员”是真的,或者“股票”是真的等等......
Python评估任何不同于“”的字符串为真。
我建议您使用以下功能:
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)