我有一个列表和字典
lis = ["abc","bcd fg","cda"]
dic = {1:"dcbagh",2:"cd abc", 3:"fg"}
我想将列表值与字典值进行比较并返回一个如下所示的新字典,
res_dic = {1:"none" ,2:"abc" , 3:"bcd fg"}
即使稍微匹配,我们也需要返回相应的字符串。我尝试过以下方法。但没有任何效果。
n = {}
for k,v in dic.items():
for i in lis:
if i==k:
n[k] = v
这是另一种方法
n = {k: d[k] for k in d.keys() & set(lis)}
答案 0 :(得分:1)
你的条件是错误的。 if i == k
将列表元素与字典键进行比较,但您想与值进行比较,即 v
。而且您不需要完全匹配,您正在寻找一个子字符串,因此您应该使用 in
而不是 ==
。由于您似乎允许任一字符串成为另一个字符串的子字符串,因此请使用 if v in i or i in v:
您在结果中分配的值应该是列表元素,而不是字典值。
但如果找不到匹配项,您还想使用值 "none"
。因此,您需要在找到匹配项时跳出循环,如果循环完成且没有中断,则使用 else:
赋值。
n = {}
for k,v in dic.items():
for i in lis:
if v in i or i in v:
n[k] = i
break
else:
n[k] = "none"