gpt4 book ai didi

python - 交换字典中的键值对

转载 作者:太空狗 更新时间:2023-10-30 00:10:27 25 4
gpt4 key购买 nike

我正在寻找交换给定字典的所有键值对的方法。

到目前为止,我能想到一种方法:

例如:

>>>a = { 0: 'a', 1 : 'b', 2 : 'c' }
>>> {value : key for key,value in a.items()}
{'a': 0, 'b': 1, 'c' : 2}

但是为此我必须使用额外的空间来声明另一个字典。
我想知道我可以使用哪些方法来交换键值对以提高空间效率。

最佳答案

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]

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

for k in list(a):
if a[k] != k:
a[a[k]] = k
del a[k]

最后一点:像这样多次修改字典可能会产生一些重新映射的副作用(增加哈希表的大小等),但这可能是 CPython 的实现细节(我不太了解确定)。

关于python - 交换字典中的键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31380911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com