2014-10-20 84 views
-1

在文件:如何删除重复val的字典?

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

我试图让他们进入字典,但我坚持,因为我不知道如何从字典中删除重复VAL。

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

有什么建议吗?

有望获得:

C15,tiger 
C02,cat 
+0

你的意思是删除的是重复的条目?那么不要离开那些? – RvdK 2014-10-20 10:08:49

+0

请显示您的尝试并解释为什么它不起作用,然后提出问题。 – wwii 2014-10-20 10:09:33

+0

@RvdK是的,我想删除重复的条目。 – ThanaDaray 2014-10-20 10:14:45

回答

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

如果我理解正确,他不需要在文件中重复的条目。 – RvdK 2014-10-20 10:09:53

+0

@RvdK我试过你的代码,但我得到'NameError:名称'd'未定义',任何建议? – ThanaDaray 2014-10-20 10:18:57

+0

你原来的问题有'd',我预计它仍然会在那里;) – Wolph 2014-10-20 10:21:54

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

字典可以通过传递一个列表或可迭代元组进行到t他内置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的值,并使用该值创建一个包含所有唯一值的新字典。

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)