设置向上
我正在与Scrapy一起开展刮削项目。
我有一个字符串列表,
l = ['john', 'jim', 'jacob', … ,'jonas']
和包含列表的字典
d = {
'names1': ['abel', 'jacob', 'poppy'],
'names2': ['john', 'tom', 'donald']
}
<小时/> 的问题
我想检查l
中的每个名字是否包含在d
的其中一个列表中。如果是这样,我希望将d
中该列表的键分配给新变量。例如。 jacob
会获得newvar = names1
。
现在我有,
found = False
for key,value in d.items():
for name in l:
if name == value:
newvar = key
found = True
break
else:
newvar = 'unknown'
if found:
break
但是,对于newvar = 'unknown'
中的每个name
,这会产生l
。
我认为我没有正确地突破外部for
循环。除此之外,是否有更优雅的方式来解决我的问题?
答案 0 :(得分:0)
我认为你遇到的问题是你想看看l中的值中是否存在l中的任何字符串。你的代码现在假设值是一个字符串,而不是一个列表,你因此试图进行比较,这将总是假的,因此分配&#34; unkown&#34;对每一个价值观。请尝试以下代码:
l = ['john', 'jim', 'jacob', 'jonas']
d = {'names1': ['abel', 'jacob', 'poppy'], 'names2': ['john', 'tom','donald']}
found = False
for a, b in d.items():
for i in l:
if i in b:
d[a] = "unkown"
flag = True
break
if flag:
break
print d
这会给你:
{'names2': 'unkown', 'names1': ['abel', 'jacob', 'poppy']}
由于你打破了循环,只有一个键有一个&#34;未知&#34; value,但是如果你想用lk替换l中包含字符串的每个值,那么这也会有效:
final_dict = {a:"unkown" if i not in b else b for i in l for a, b in d.items()}
print final_dict