检查字符串列表中的字符串是否等于字典中列表中的一个值,然后将键值赋给变量

时间:2017-05-12 13:39:25

标签: python dictionary for-loop

设置向上

我正在与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循环。除此之外,是否有更优雅的方式来解决我的问题?

1 个答案:

答案 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