python - 反转字典

标签 python for-loop dictionary

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

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/

相关文章:

python - 为 Django/Python 3 配置 Azure

python - OpenERP名称错误: name '_date_of_q_created' is not defined

c++ - std::map 只读位置的分配

java - 循环使圆变大

python - 比较 pandas 映射和合并

python - 在Python字典中的列表中搜索值

python - 如何在python中将成本函数定义为 tensorflow 中的均方根对数误差

python - 使用 pyplot 获取数据框错误日期(偏移一天)

Javascript For 循环...一个函数在另一个函数中?

c++ - 为什么编译器需要尾随返回类型?