import itertools, operator
my_dict = {'foo': 1, 'bar': 5, 'foo1' : 1,'bar1' : 1, 'foo2': 5}
inverse_dict = { k:map(operator.itemgetter(0), v) for k, v in itertools.groupby(sorted(my_dict.items(), key=operator.itemgetter(1)), operator.itemgetter(1)) }
要使用集合进行聚合,只需将映射的值包装到集合构造函数中。你知道吗
inverse_dict = { k:set(map(operator.itemgetter(0), v)) for k, v in itertools.groupby(sorted(my_dict.items(), key=operator.itemgetter(1)), operator.itemgetter(1)) }
你应该使用^{} 。你知道吗
对于一个带有函数扭曲的单行程序(可能不是可读性和性能最好的代码):
要使用集合进行聚合,只需将映射的值包装到集合构造函数中。你知道吗
给定的键不能有多个值,因此这种数据结构中的值必须是列表。使用
zip()
无法轻松完成此转换;需要一个for
循环:从问题中的编辑来看,您似乎希望使用一组值。这也很简单:
您也可以像Daniel建议的那样使用
defaultdict
,但是在这里仅仅为了这个而导入似乎有些过分了。根据字典的大小,它可能会快一点,因为使用setdefault()
我们不断地创建和丢弃空容器。你知道吗相关问题 更多 >
编程相关推荐