如何删除有重复val的dict?

2024-05-15 19:31:18 发布

您现在位置: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

Tags: 文件keyaswithlinevaldictcat
3条回答

字典键在默认情况下是唯一的,因此可以使用该属性使其更好地工作。你知道吗

像这样的东西应该可以做到这一点(尽管您必须反转输出的键/值,但我将把它作为练习留给您):

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

print d.items()

请注意,这将为每个值提供一个键,如果您只是希望删除任何重复项,则会略有不同(但相似):

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]
# turn the data into a dictionary
with fop as f:
    data = dict(line.strip().split(',') for line in f)

字典可以通过向dict内置元素传递元组列表或iterable来创建。这使得将数据转换成字典变得非常简单。你知道吗

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类是统计值在iterable中出现的次数的字典。然后,我们可以提取计数为1的值,并使用该值创建一个包含所有唯一值的新字典。你知道吗

只需记录在构建词典时看到的值:

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) 

相关问题 更多 >