python - 反转默认字典

标签 python dictionary

我有一个 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/

相关文章:

python - 在 Pgadmin4 中恢复数据库时出错

python - 用字典中的缩写键替换 "full name"键

python - 嵌套列表到嵌套字典

python - 我的系统出了什么问题,无法解压dict。有 unicode 对象?

arrays - 我想将具有属性(btnImage + btnTitle)的字典数组从Plist读取到TableViewCell中

python - 如何为 openCV SVM 格式化数据

python - 我如何使这么长的 if 语句不那么麻烦?

python - 在 Python 中从 amara 切换到 lxml

python - 动态添加图例到 matplotlib 图

ios - 在对象数组的字典中应用过滤器