【发布时间】:2023-03-10 13:01:01
【问题描述】:
虽然我一直在提高我的 Python 技能,但我有一个问题。 我的代码如下:
# def invertDictionary(dict):
# new_dict = {}
# for key, value in dict.items():
# if value in new_dict:
# new_dict[value].append(key)
# else:
# new_dict[value]=[key]
# return new_dict
def invertDictionary(dict):
new_dict = {value:([key] if value else [key]) for key, value in dict.items()}
return new_dict;
invertDictionary({'a':3, 'b':3, 'c':3})
我正在尝试获得像 {3:['a','b','c']} 这样的输出。我已经使用普通的for循环实现了这一点;我只想知道如何使用 Dictionary Comprehension 获得这些结果。我试过但附加它得到一个错误。请让我知道如何实现这一目标。
提前致谢!
【问题讨论】:
-
我不认为你可以通过 dict 理解来做到这一点,但你可以通过使用
collections.defaultdict或执行类似new_dict.setdefault(value, []).append(key)的操作来摆脱函数中的if ... else ...语句。 -
如果没有某种预先占有,就没有优雅的理解方式
-
这是可能的,但它迫使你使用一种可能效率低下的方法,得到一个二次时间算法,而天真的 for 循环方法会给你线性时间。
-
@juanpa.arrivillaga 我会说copperfield's 是不错的(至少不是黑客)而且也是次二次的。
标签: python python-3.x