两个列表的比较结果是带有duplacated项目的字典

时间:2015-03-17 20:47:34

标签: python list python-2.7 dictionary compare

我尝试使用函数来比较两个列表中的项目,如果列表中的字符串甚至部分匹配,则写入{item_list1_as_key:item_list2_as_value}之类的结果。此功能如下所示:

def compareItemsInLists(ref, searchlist):
   matchdict=dict.fromkeys(ref, [])
   for item in ref:
      for stitem in searchlist:
         if item in stitem:
            print "Key %s matches string %s" %(item,stitem) 
            matchdict[item].append(stitem)
   return matchdict

ref=["a","b","c"]
searchlist=["aaa","bab","cbc","ddd"]

然而,我得到了这样的回报:

Key a matches string aaa
Key a matches string bab
Key b matches string bab
Key b matches string cbc
Key c matches string cbc
{'a': ['aaa', 'bab', 'bab', 'cbc', 'cbc'], 
'c': ['aaa', 'bab', 'bab', 'cbc', 'cbc'], 
'b': ['aaa', 'bab', 'bab', 'cbc', 'cbc']}

看起来比较效果很好,但我无法识别.append函数的错误。为什么要在searchlist和不匹配的项目中写入重复的项目?

2 个答案:

答案 0 :(得分:1)

似乎行matchdict=dict.fromkeys(ref, [])正在使用对每个键的相同列表的引用。如this answer中所述,您可以使用这样的字典理解:

matchdict={key: list() for key in ref}

答案 1 :(得分:0)

或者,您可以在字典初始化后创建并分配列表:

def compareItemsInLists(ref, searchlist):
    matchdict=dict.fromkeys(ref, None)
    for item in ref:
        list1 = []
        for stitem in searchlist:
            if item in stitem:
                print "Key %s matches string %s" %(item,stitem) 
                list1.append(stitem)
        matchdict[item] = list1
    return matchdict