我有一个 defaultdict(list),其中我的键是元组类型,我的值是元组列表。 我想反转这本字典,我已经尝试过使用 zip 函数,但这不起作用
下面是我的字典结构示例
{(2, '-', 3): [('Canada', 'Trudeau'),('Obama', 'USA')]}
有没有什么办法可以扭转这种情况,以便我以相反的方式获得键和值
最佳答案
由于您有一个列表字典,您需要使列表成为一个不可变类型,以用作 Python 字典中的键。
您可以使列表值元组:
>>> di={(2, '-', 3): [('Canada', 'Trudeau'),('Obama', 'USA')]}
>>> {tuple(v):k for k, v in di.items()}
{(('Canada', 'Trudeau'), ('Obama', 'USA')): (2, '-', 3)}
或者把它们变成字符串:
>>> {repr(v):k for k, v in di.items()}
{"[('Canada', 'Trudeau'), ('Obama', 'USA')]": (2, '-', 3)}
如果需要,您可以将 key 转换回列表:
>>> from ast import literal_eval
>>> literal_eval("[('Canada', 'Trudeau'), ('Obama', 'USA')]")
[('Canada', 'Trudeau'), ('Obama', 'USA')]
>>> list((('Canada', 'Trudeau'), ('Obama', 'USA')))
[('Canada', 'Trudeau'), ('Obama', 'USA')]
(顺便说一句:如果代码可能有任何外部字符串,请不要使用 eval
——在生产代码中使用 ast.literal_eval,如此处示例所示。)
最后,考虑这个字典:
di={'key 1':'val', 'key 2': 'val', 'key 3': 'val'}
当您反转键和值时,您将在添加每个键“val”时丢失数据。
您可以使用默认字典来解决重复值成为键的问题:
dd=defaultdict(list)
for k, v in di.items():
dd[v].append(k)
>>> dd
defaultdict(<type 'list'>, {'val': ['key 1', 'key 2', 'key 3']})
关于python - 反转默认字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33599347/