将列表值与字典 python 进行比较

时间:2021-01-23 20:18:40

标签: python python-3.x list dictionary

我有一个列表和字典

   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)}

1 个答案:

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