2

假设有一本字典

a = {'a':122,'b':123,'d':333,'e':'233'}

现在我想将它恢复为一对一的字典,这样我们就可以做到这一点。

我试过的:

In [67]: ivd=[(v,k) for (k,v) in a.items()]

In [68]: ivd
Out[68]: [(122, 'a'), (123, 'b'), ('233', 'e'), (333, 'd')]

现在可能是一些我们如何将其转换ivd为字典的方法。我的问题是

  1. 如何将其更改ivd为字典?
  2. 有没有更多的pythonic解决方案可以做到这一点?我认为它应该在那里。
4

4 回答 4

11

您可以使用 dict 构造函数:

ivd = dict((v, k) for (k, v) in a.iteritems())

或 python 2.7 或更高版本中的 dict 理解:

ivd = {v: k for (k, v) in a.items()}
于 2012-08-15T22:09:26.693 回答
2

如果我理解正确,您就快到了:

>>> ivd={v:k for (k,v) in a.items()}
>>> ivd
{122: 'a', 123: 'b', 333: 'd', '233': 'e'}

(为此应归功于 stummjr:https ://stackoverflow.com/a/11977757/289011 )

于 2012-08-15T22:10:34.247 回答
0

为什么不只是

ivd = {a[key]:key for key in a}

你的字典在哪里?看起来简单多了。在 python 中,您可以直接遍历 dict 的键。

于 2012-08-15T22:40:37.013 回答
0

这里有两种方法可以做到:

a = {"a": 122, "b": 123, "d": 333, "e": "233"}

expected = {122: "a", 123: "b", 333: "d", "233": "e"}


# Use to invert dictionaries that have unique values
inverted_dict = dict(map(reversed, a.items()))
assert inverted_dict == expected, "1st"

# Use to invert dictionaries that have unique values
inverted_dict = {value: key for key, value in a.items()}
assert inverted_dict == expected, "2nd"

print("PASSED!!!")
于 2020-02-02T10:32:44.300 回答