首页 > 编程语言 > 详细

python中字典一键多相同值反转技巧

时间:2021-06-16 00:06:53      阅读:20      评论:0      收藏:0      [点我收藏+]
>>> some_dict = {(‘D‘, 15, 30): ‘D‘, (‘F‘, 15, 16): ‘F‘, (‘F‘, 17, 22): ‘F‘, (‘F‘, 23, 26): ‘F‘, (‘F‘, 27, 30): ‘F‘, (‘A‘, 2, 4): ‘A‘, (‘A‘, 5, 9):  
... ‘A‘, (‘A‘, 10, 13): ‘A‘, (‘A‘, 14, 30): ‘A‘, (‘B‘, 15, 30): ‘B‘, (‘C‘, 15, 30): ‘C‘}
>>> rev_multidict = {}
>>> for key,value in some_dict.items():
...     rev_multidict.setdefault(value,set()).add(key)
... 
>>> rev_multidict
{‘D‘: {(‘D‘, 15, 30)}, ‘F‘: {(‘F‘, 23, 26), (‘F‘, 15, 16), (‘F‘, 17, 22), (‘F‘, 27, 30)}, ‘A‘: {(‘A‘, 14, 30), (‘A‘, 2, 4), (‘A‘, 10, 13), (‘A‘, 5, 9)}, ‘B‘: {(‘B‘, 15, 30)}, ‘C‘: {(‘C‘, 15, 30)}}
>>> [key for key,values in rev_multidict.items() if len(values) > 1]
[‘F‘, ‘A‘]
>>> [values for key,values in rev_multidict.items() if len(values) >1]
[{(‘F‘, 23, 26), (‘F‘, 15, 16), (‘F‘, 17, 22), (‘F‘, 27, 30)}, {(‘A‘, 14, 30), (‘A‘, 2, 4), (‘A‘, 10, 13), (‘A‘, 5, 9)}]
>>> set(chain.from_iterable(values for key,values in rev_multidict.items() if len(values) > 1))
>>> from itertools import chain
>>> set(chain.from_iterable(values for key,values in rev_multidict.items() if len(values) > 1))
{(‘F‘, 23, 26), (‘F‘, 15, 16), (‘A‘, 10, 13), (‘A‘, 14, 30), (‘F‘, 17, 22), (‘A‘, 2, 4), (‘A‘, 5, 9), (‘F‘, 27, 30)}
>>> type(set(chain.from_iterable(values for key,values in rev_multidict.items() if len(values) > 1)))
<class ‘set‘>
>>> for i in set(chain.from_iterable(values for key,values in rev_multidict.items() if len(values) > 1)):
...     print(i)
... 
(‘F‘, 23, 26)
(‘F‘, 15, 16)
(‘A‘, 10, 13)
(‘A‘, 14, 30)
(‘F‘, 17, 22)
(‘A‘, 2, 4)
(‘A‘, 5, 9)
(‘F‘, 27, 30)
>>> 

python中字典一键多相同值反转技巧

原文:https://www.cnblogs.com/Richardo-M-Q/p/14886481.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!