【发布时间】:2014-02-02 15:11:23
【问题描述】:
def invert_dict(d):
inv = dict()
for key in d:
val = d[key]
if val not in inv:
inv[val] = [key]
else:
inv[val].append(key)
return inv
这是 Think Python 书中的一个示例,一个用于反转(交换)字典中的键和值的函数。新值(以前的键)存储为列表,因此如果在反转之前有多个相等的字典值(绑定到不同的键),则此函数只需将它们附加到以前的键列表中。
例子:
somedict = {'one': 1, 'two': 2, 'doubletwo': 2, 'three': 3}
invert_dict(somedict) ---> {1: ['one'], 2: ['doubletwo', 'two'], 3: ['three']}
我的问题是,字典推导也可以这样做吗?此函数创建一个空字典inv = dict(),稍后在函数中使用if/else 检查值是否存在。在这种情况下,字典理解应该检查自己。这可能吗?语法应该如何?
交换值的通用字典理解语法是:
{value:key for key, value in somedict.items()}
但是如果我想添加一个“if”分句,它应该是什么样子? if value not in (what)?
谢谢。
【问题讨论】:
-
通常缩短
invert_dict代码的方法是使用setdefault或defaultdict。我不知道有什么方法可以在字典理解中写这个,并且怀疑这样做的任何方法都将是完全不可读的。
标签: python python-3.x swap dictionary-comprehension