如何删除有重复val的字典?

时间:2014-10-20 10:03:45

标签: python

在档案中:

A01,rose
C15,tiger
C02,cat
B03,rose

我试图将它们变成dict,但是我被困住了,因为我不知道如何从dict中删除重复的val。

with fop as f:
    for line in f:
       (key, val) = line.strip().split(',')
       d[str(key)] = val

有什么建议吗?

预计得到:

C15,tiger
C02,cat

3 个答案:

答案 0 :(得分:0)

字典键默认是唯一的,因此您可以使用该属性使其更好地工作。

这样的事情应该可以解决问题(尽管你必须反转输出的键/值,但我会把它作为练习留给你):

d = {}
with fop as f:
    for line in f:
        key, val = line.strip().split(',')
        d[val] = key

print d.items()

请注意,这会为每个值提供1个密钥,如果您只是想要删除任何重复的项目,它会略有不同(但相似):

d = {}
duplicates = {}
with fop as f:
    for line in f:
       key, val = line.strip().split(',')
       if val in d:
           duplicates[val] = True
       d[val] = key

for duplicate in duplicates:
    del d[duplicate]

答案 1 :(得分:0)

只需跟踪您在构建字典时看到的值:

seen = set()
d = dict()

with open('some-file') as f:
   for line in f:
      if line.strip():
          for key,value in line.split(','):
             if value not in seen:
                 d[key] = value
                 seen.add(value) 

答案 2 :(得分:-1)

# turn the data into a dictionary
with fop as f:
    data = dict(line.strip().split(',') for line in f)

可以通过将列表或可迭代元组传递给dict内置函数来制作字典。这使得将数据转换为非常简单的字典。

from collections import Counter

# extract unique values
value_counts = Counter(data.values())
unique_values = set(value for value, count in value_counts.items() if count == 1)
unique_data = dict((key, value) for key, value in data.items() 
        if value in unique_values)

Counter类是一个字典,用于计算值在迭代中出现的次数。然后,我们可以提取计数为1的值,并使用它来创建包含所有唯一值的新字典。