Python 字典互换 Key 和 Value

这种场景应该比较特殊。

一、原字典的 Value 无重复

这种比较简单。假设我们有一个叫 d 的字典:

d = {
    'a': 'x',
    'b': 'y',
    'c': 'z'
}

需要将其转换成:

p = {
    'x': 'a',
    'y': 'b',
    'z': 'c'
}

只需要进行如下操作:

p = {}
for k, v in d.items():
    p.setdefault(v, k)

或者简单写成:

p = dict((k, v) for v, k in d.items())

二、原字典的 Value 有重复

假设我们有一个叫 d 的字典:

d = {
    '狗': '动物',
    '猫': '动物',
    '水稻': '植物',
    '荷花': '植物',
    '牛': '动物'
}

需要将其转换成:

p = {
    '动物': ['狗', '猫', '牛'],
    '植物': ['水稻', '荷花']
}

可以使用如下方法:

p = {}
for k, v in d.items():
    p.setdefault(v, []).append(k)

这样 p 就成了我们想要的样子。原理在于 dictionary 的 setdefault 方法:

setdefault(key[, default])
If key is in the dictionary, return its value. If not, insert key with a value of default and return default. default defaults to None.

  1. 当第一次循环时,setdefault(v, []) 方法为 p 字典创建了一个 key ,因为之前这个 key 不存在,且我们设置了值为 [] ,所以他的值为一个空的 list;然后我们用 list 的 append() 方法将 k 追加进 list 中。
  2. 在后续的循环中,如果循环到的 v 已经是 p 字典的 key 之一,setdefault() 方法则会忽略我们提供的第二个参数,直接返回 v 对应的值,我们再次进行了 list.append() 操作。

留下评论

电子邮件地址不会被公开。 必填项已用*标注