Swap keys for unique values in a dictionary in Python
1 2 3 4 5 | a = {0: 'PtpMotion', 1: 'PtpMotion', 2: 'LinMotion', 3: 'LinMotion', 4: 'LinMotion', 5: 'LinMotion', 6: 'LinMotion', 7: 'LinMotion', 8: 'LinMotion', 9: 'PtpMotion', 10: 'LinMotion', 11: 'Wait'} b = {} for key, val in a.items(): b[val] = key print b |
我想做的是把字典的值换成键。但是使用这段代码,我会丢失字典的一些信息,得到这个输出:
1 | {'LinMotion': 10, 'PtpMotion': 9, 'Wait': 11} |
号
为什么会这样?
每个键在字典中只能出现一次。您可以存储每个键的索引列表:
1 2 3 4 5 6 | import collections b = collections.defaultdict(list) for key, val in a.iteritems(): b[val].append(key) print b # {'LinMotion': [2, 3, 4, 5, 6, 7, 8, 10], 'PtpMotion': [0, 1, 9], 'Wait': [11]} |
编辑:正如ecik在评论中指出的,您也可以使用
当你说
1 | b[val] = key |
。
VAL已经存在,它会覆盖设置,获取您看到的内容。要获取所有值,必须将原始值映射到键列表,例如
1 2 3 4 5 6 | from collections import defaultdict b = defaultdict(list) for key, val in a.items(): b[val].append(key) print b |
当我这样做时(python 2.5.1),我得到
1 2 3 | defaultdict(<type 'list'>, {'LinMotion': [2, 3, 4, 5, 6, 7, 8, 10], 'PtpMotion': [0, 1, 9], 'Wait': [11]}) |
。
字典键必须唯一。如果你想把它们全部保留下来,你就必须为
也许您需要输出字典中的列表:
1 2 3 4 5 6 | from collections import defaultdict a = {0: 'PtpMotion', 1: 'PtpMotion', 2: 'LinMotion', 3: 'LinMotion', 4: 'LinMotion', 5: 'LinMotion', 6: 'LinMotion', 7: 'LinMotion', 8: 'LinMotion', 9: 'PtpMotion', 10: 'LinMotion', 11: 'Wait'} b = defaultdict(list) for key, val in a.items(): b[val].append(key) print b |
号
产量:
1 | defaultdict(<type 'list'>, {'LinMotion': [2, 3, 4, 5, 6, 7, 8, 10], 'PtpMotion': [0, 1, 9], 'Wait': [11]}) |