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'}
由于dict中存在键的{'a':3,'b':2}
,因此会导致相应键的值从a
更新到1
3
- 步骤4:
当
插入新命令时,结果是{4:'a'}
由于dict中存在键的{'a':3,'b':4}
,因此会导致相应键的值从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,谢谢你。我编辑了这篇文章。