如果键,值对存在于字典跳过python中

时间:2016-03-04 15:50:01

标签: python dictionary

我想使用collections.defaultdict(list)将两个变量添加到字典中 以下是两个变量:

score = [0, 5, 7, 7, 8, 7]
match = ['turtle', 'cat', 'horse', 'horse', 'dog', 'bear']

我想要删除字典中已有的键/值对。现在我正在使用这种方法创建我的字典:

  scoring = collections.defaultdict(list)
  scoring[score].append(match)

然而,这个方法给了我一个这样的字典:

dictionary = {0: ['turtle'], 5: ['cat'], 7: ['horse', 'horse', 'bear'], 8: ['dog']}

但是,我只希望马出现在词典中一次。无论如何都要以这种方式阻止在字典中添加相同的键/值对吗?

2 个答案:

答案 0 :(得分:2)

您可以使用set()代替list来保留值:

>>> coring = defaultdict(set)
>>> for i,j in zip(score, match):
...     coring[i].add(j)
... 
>>> coring
defaultdict(<type 'set'>, {0: set(['turtle']), 8: set(['dog']), 5: set(['cat']), 7: set(['horse', 'bear'])})
>>> 

由于set对象不保留订单,如果您关心值的项目顺序,则可以使用OrdereDict作为值容器:

>>> from collections import defaultdict, OrderedDict
>>> coring = defaultdict(OrderedDict)
>>> 
>>> for i,j in zip(score, match):
...     coring[i][j]=None
... 
>>> coring
defaultdict(<class 'collections.OrderedDict'>, {0: OrderedDict([('turtle', None)]), 8: OrderedDict([('dog', None)]), 5: OrderedDict([('cat', None)]), 7: OrderedDict([('horse', None), ('bear', None)])})
>>> 
>>> coring[7]
OrderedDict([('horse', None), ('bear', None)])
>>> coring[7].keys()
['horse', 'bear']

答案 1 :(得分:1)

如果您想继续使用列表而不是集合,那么请进行过滤:

>>> d = defaultdict(list)
>>> for k,v in zip(score, match):
        if k not in d or v not in d[k]:
            d[k].append(v)


>>> d
defaultdict(<class 'list'>, {0: ['turtle'], 8: ['dog'], 5: ['cat'], 7: ['horse', 'bear']})