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

>>> 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)
>>> 
posted @ 2021-06-15 17:46  Richardo-M-Lu  阅读(104)  评论(0编辑  收藏  举报