在python中切换字典中的键和值

me4*_*e45 43 python dictionary key

说我有这样的字典:

my_dict = {2:3, 5:6, 8:9}
Run Code Online (Sandbox Code Playgroud)

有没有办法可以切换键和值来获得:

{3:2, 6:5, 9:8}
Run Code Online (Sandbox Code Playgroud)

GWW*_*GWW 75

my_dict2 = dict((y,x) for x,y in my_dict.iteritems())
Run Code Online (Sandbox Code Playgroud)

如果您使用的是python 2.7或3.x,则可以使用字典理解:

my_dict2 = {y:x for x,y in my_dict.iteritems()}
Run Code Online (Sandbox Code Playgroud)

编辑

正如JBernardo的评论中所指出的,对于python 3.x,您需要使用items而不是iteritems

  • `.iteritems()`在Python 3.x上无效...... (3认同)
  • @tsando:我认为你错误地读了我的答案.我有`{y:x ...` (3认同)
  • 另一个更正 - 做字典理解你建议`{(y, x) for x, y in dic_cols_w.items()}` 返回一个集合,而不是一个字典。您仍然需要将其包装在`dict(...)` 中以获取字典 (2认同)

小智 8

my_dict = { my_dict[k]:k for k in my_dict}
Run Code Online (Sandbox Code Playgroud)

  • 干净地回答这一点。 (3认同)

Ósc*_*pez 6

试试这个:

my_dict = {2:3, 5:6, 8:9}

new_dict = {}
for k, v in my_dict.items():
    new_dict[v] = k
Run Code Online (Sandbox Code Playgroud)


Tro*_*ott 6

使用此代码(通过修改)从Python中接受的答案反向/反转映射:

dict((v,k) for k, v in my_dict.iteritems())
Run Code Online (Sandbox Code Playgroud)

请注意,这假定原始字典中的值是唯一的.否则,您最终会在结果字典中使用重复键,这是不允许的.

并且,正如@wim指出的那样,它还假设值是可清除的.如果您不确定什么是可用的,那么请参阅Python词汇表.


aar*_*ron 5

也许:

flipped_dict = dict(zip(my_dict.values(), my_dict.keys()))

  • 尽管它确实对我有用,但这可能并不安全,因为它依赖于键和值的排序。我喜欢JBernardo / GWW的回答。 (2认同)