Python比较同一字典中的值

2024-06-01 08:07:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典:

d = {'Trump': ['MAGA', 'FollowTheMoney'],
     'Clinton': ['dems', 'Clinton'],
     'Stein': ['FollowTheMoney', 'Atlanta']}

我要删除字符串列表中的重复字符串,该字符串是键的值。

对于本例,期望的结果是

update_d = {'Trump': ['MAGA'],
            'Clinton': ['dems', 'Clinton'],
            'Stein': ['Atlanta']}

有一个类似的问题被问到了here,但是我还不能修改它来达到我的目的。

我的尝试:

new_d = {}
for key in d:  
    for key2 in d:
        lst = d[key]
        lst2 = d[key2]

        for string in lst:  
           for string2 in lst2:
              if string not in new_d:

我的问题是我想比较所有键的值并删除重复项。但是,我不知道这是怎么实现的


Tags: key字符串innewforkey2lststein
2条回答

您可以使用Counter来统计每个值在d中出现的次数。

d = {'Trump': ['MAGA', 'FollowTheMoney'],
     'Clinton': ['dems', 'Clinton'],
     'Stein': ['FollowTheMoney', 'Atlanta']}

from collections import Counter

c = Counter(x for xs in d.values() for x in xs)

在本例中,c的值是

Counter({'Atlanta': 1,
         'Clinton': 1,
         'FollowTheMoney': 2,
         'MAGA': 1,
         'dems': 1})

然后选择计数正好为1的值。

update_d = {k: [v for v in vs if c[v] == 1] for k, vs in d.items()}

不像使用Counter那样优雅,但是在不使用模块的情况下删除重复项:

d = {'Trump': ['MAGA', 'FollowTheMoney'],
    'Clinton': ['dems', 'Clinton'],
    'Stein': ['FollowTheMoney', 'Atlanta']}

dupvals = [item for sublist in d.values() for item in sublist] # get all values from all keys into a list
dups = [] # list to hold duplicates

for i in dupvals:
    if dupvals.count(i) > 1:
        dups.append(i)

dupvals = set(dups) # keep only one item for each duplicated item

new_d = {}

for key,values in d.items():
    for value in values:
        if not value in dupvals:
            new_d.setdefault(key, []).append(value)

print new_d # {'Clinton': ['dems', 'Clinton'], 'Trump': ['MAGA'], 'Stein': ['Atlanta']}

相关问题 更多 >