python字典类型实现的键值对的映射_python – 在字典中交换键值对

博客探讨了在Python中反转字典时如何处理内存效率。文章指出,由于字典的内部结构,反转字典需要创建新的条目,而不能直接修改原有结构。提到的解决方案包括使用字典推导式和在原字典上进行修改,但后者要求值是唯一的。还提到了修改字典可能带来的潜在副作用,如散列表大小的变化。
摘要由CSDN通过智能技术生成

But for this I would have to use extra space for declaring another dictionary.

由于字典本质上是一个查找表,因此它有一种在内存中布局的具体方式;密钥有效地分配,只是指向值 – 它们本身没有特殊含义.因此,当您想要反转映射时,您无法真正使用现有结构;相反,您将不得不从头开始创建新的字典条目.您在问题中使用的词典理解是一种很好的,明确的方法.

然而,您可以重复使用已有的字典并在那里添加新密钥(同时删除旧密钥):

for k in a:

a[a[k]] = k

del a[k]

这会修改相同的字典,因此它不会有新字典的(可能很少)开销.请注意,这假设所有值都是唯一的,因此映射可以完全颠倒,并且键和值集不共享公共值.否则,您将遇到字典大小更改的异常或缺少值.你可以通过创建字典键的副本来避免前者(虽然这意味着你现在也有一个列表存储):

for k in list(a):

if a[k] != k:

a[a[k]] = k

del a[k]

最后一点:可能多次修改字典可能会有一些重映射副作用(增加散列表大小等),但这可能是CPython的实现细节(我对此不太了解) ).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值