gpt4 book ai didi

python - 反转字典

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:29 24 4
gpt4 key购买 nike

我目前正在尝试制作一个函数来反转字典的键和值。我在网上查找并发现了这个:

def reverse(d):
return dict([(v, k) for k, v in d.iteritems()])

我的问题是我不确定这意味着什么。我理解单行 for 循环的想法,但我不确定 (v, k) for k, v 是如何导致键和值被反转的。有人可以帮我一下吗? (我确实在网上和 Stack Overflow 上搜索过这个,但找不到任何东西。)

最佳答案

for k, v in d.iteritems() 是每个 key kvalue v 所以用 反转 v 和 k (v, k) 使旧值成为键,旧键成为新值

In [7]: d = {1:10,2:20}

In [8]: d.items()
Out[8]: dict_items([(1, 10), (2, 20)]) # tuples of key and value

In [1]: d = {1:10,2:20}

In [2]: for k,v in d.iteritems():
print k,v
...:
1 10 # 1 is the key 10 is the value
2 20
In [3]: new_d = {v:k for k,v in d.iteritems()} # swap key for value and value for key

In [4]: new_d
Out[4]: {10: 1, 20: 2}

您可能遇到的两个问题是重复值或不可散列的值,因此它们不能用作列表、集合等的键...

In [5]: d = {1:2,2:2}

In [6]: new_d = {v:k for k,v in d.iteritems()}

In [7]: new_d
Out[7]: {2: 2} # now only one key and value in the dict

In [8]: d = {1:2,2:[2]}

In [9]: new_d = {v:k for k,v in d.iteritems()}
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-9-46a3901ce850> in <module>()
----> 1 new_d = {v:k for k,v in d.iteritems()}

<ipython-input-9-46a3901ce850> in <dictcomp>((k, v))
----> 1 new_d = {v:k for k,v in d.iteritems()}

TypeError: unhashable type: 'list'

dict([(v, k) for k, v in d.iteritems()]) 将具有与 {v:k for k,v in d 相同的输出。 iteritems()},主要区别是前者还兼容python < 2.7。

如果您使用的是 python < 2.7,则无需使用列表,您可以只使用生成器表达式:

dict((v, k) for k, v in d.iteritems())

关于python - 反转字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27368782/

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