说我有一个像ApplicationRef
这样的词典。在这种情况下,相同的值将表示“P-1”和“F-1”。并删除了4个条目。我想知道如何编写我的代码以使其有效并且可以处理非常大的字典(例如几十个重复的值)。
答案 0 :(得分:1)
这是一个可以做你想要的功能:
>>> import collections
>>> def remove_duplicates(d):
... grouper = collections.defaultdict(list)
... for k, v in d.items():
... grouper[v].append(k)
... total = 0
... for val, keys in grouper.items():
... if len(keys) > 1:
... for k in keys:
... del d[k]
... total += len(keys)
... return total
...
>>> d = {'Alice':'P-1', 12:'F-1', 17:'P-1', 'Bob':'F-1', 19:'T'}
>>> remove_duplicates(d)
4
>>> d
{19: 'T'}
它在线性时间内工作,但需要线性空间。就个人而言,我会创建一个新词典,而不是修改原文,但这就是上面所做的。
答案 1 :(得分:0)
你可以试试这个:
import re
s = {'Alice':'P-1', 12:'F-1', 17:'P-1', 'Bob':'F-1', 19:'T'}
removal_count = len([b for a, b in s.items() if b[-1].isdigit() and [re.findall('\d+$', c) for c in s.values()].count(re.findall('\d+$', b)) > 1])
print(removal_count)
输出:
4
过滤字典:
new_s = {a:b for a, b in s.items() if [re.findall('\d+$', c) for c in s.values()].count(re.findall('\d+$', b)) <= 1}
输出:
{19: 'T'}