Python 如何使用字典中的值交换键

Python 如何使用字典中的值交换键,python,Python,输出应包含原始字典中的所有键和值: dicts={1:a',2:b',3:a',4:a'} 但是,当我尝试交换它时,结果是: {'a':4,'b':2} 如何解决此问题?您可以添加反向项,然后删除以前的项: dicts.update(dict([(key, item) for item, key in dicts.items() if item in [1, 2]])) del(dicts[1]) del(dicts[2]) 我不确定我是否完全回答了你的问题,因为它有点让人困惑。在上面的

输出应包含原始字典中的所有键和值:

dicts={1:a',2:b',3:a',4:a'}
但是,当我尝试交换它时,结果是:

{'a':4,'b':2}

如何解决此问题?

您可以添加反向项,然后删除以前的项:

dicts.update(dict([(key, item) for item, key in dicts.items() if item in [1, 2]]))
del(dicts[1])
del(dicts[2])


我不确定我是否完全回答了你的问题,因为它有点让人困惑。在上面的注释中,您表示只希望将
1:a
的键/值反转为
'a':1

您可能会发现该模块很有用

import collections

d = collections.defaultdict(list)

dicts = {1:'a', 2:'b', 3:'a', 4:'a'}

for key, value in dicts.items():
    d[value].append(key)
然后尝试输出:

>>> d
defaultdict(<type 'list'>, {'a': [1, 3, 4], 'b': [2]})
>>d
defaultdict(,{'a':[1,3,4],'b':[2]})

让我解释一下为什么无法获得所需的输出

我猜您的代码如下所示:

dicts = {1:'a', 2:'b', 3:'a', 4:'a'}
new_dicts = {v: k for k,v in dicts.items()}
print new_dicts
{'a': 4, 'b': 2}
输出如下所示:

dicts = {1:'a', 2:'b', 3:'a', 4:'a'}
new_dicts = {v: k for k,v in dicts.items()}
print new_dicts
{'a': 4, 'b': 2}
这是代码操作:

  • 步骤1:

    {1:'a'}
    插入新命令时,结果是
    {'a':1}

  • 步骤2:

    {2:'b'}
    插入新命令时,结果是
    {'a':1',b':2}

  • 步骤3:

    {3:'a'}
    插入新命令时,结果是
    {'a':3,'b':2}
    由于dict中存在键的
    a
    ,因此会导致相应键的值从
    1
    更新到
    3

  • 步骤4:

    {4:'a'}
    插入新命令时,结果是
    {'a':3,'b':4}
    由于dict中存在键的
    b
    ,因此会导致相应键的值从
    2
    更新到
    4


这就是为什么您会得到输出,因为您不知道dict的特征。

您的原始字典是什么,预期结果是什么?一个字典每个键只能容纳1个对象。转置时,有多个值与键
'a'
。。。你可以做一些像
{'a':[1,2,4],'b':[3]}
--这行得通吗?最初的字典是这样的dicts={1:'a',2:'b',3:'a',4:'a'}输出应该像{'a':1,2:'b',3:'a',4:'a'}很好的解决方案,虽然
对于键,dicts.items()中的值:
在循环中看起来更清晰。是的,@AudriusKažaukukas,谢谢你。我编辑了这篇文章。