Python3字典去重:保留值对应的首个字母序键
按值去重并保留字母序最靠前的键
假设存在如下Python字典:
full_dic = { 'aa': 1, 'ac': 1, 'ab': 1, 'ba': 2, ... }
我之前使用标准字典推导式实现去重:
t = {val : key for (key, val) in full_dic.items()} cleaned_dic = {val : key for (key, val) in t.items()}
调用print(cleaned_dic)会输出{'ab': 1,'ba': 2, ...}。这种方法看似总是保留最后一个键,但由于字典本身无序,结果完全无法保证。我需要一种能确保保留字母序最靠前的键的方法,无论原字典的“顺序”如何,最终输出应为:
>> {'aa': 1,'ba': 2, ...}
其中'aa'是对应值1的所有键中字母序最靠前的那个。
我针对3种解决方案进行了计时测试(测试字典由随机键值对生成):
dict length: 10 # of loops: 100000 HoliSimo (OrderedDict): 0.0000098405 seconds Ricardo: 0.0000115448 seconds Mark (itertools.groupby): 0.0000111745 seconds dict length: 1000000 # of loops: 10 HoliSimo (OrderedDict): 6.1724137300 seconds Ricardo: 3.3102091300 seconds Mark (itertools.groupby): 6.1338266200 seconds
可见:针对小型字典,使用OrderedDict的方案速度最快;针对大型字典,Ricardo的方案表现更优。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

