是否有可能产生one liner(即理解),其时间复杂度比O(n²)更好,如下所示?

my_map = {'A': 'x',
          'B': 'y',
          'C': 'x',
          'D': 'z'}

rev_map = {b: [a2 for a2 in my_map.keys() if my_map[a2] == b]
           for a, b in my_map.items()}

在相关Reverse / invert a dictionary mapping中未找到任何.

推荐答案

问题不是一句俏皮话.问题是理解是用于表达式mapping/filtering操作的.使用dict的map/filter无法得到这个的O(N)实现.您需要reduce.当然,如果将其保留在一行中,使用lambda表达式,它将是粗糙和丑陋的:

而一行:

reduce(lambda d, k: [d.setdefault(my_map[k], []).append(k), d][1], my_map, {})

在REPL中:

>>> my_map = {'A': 'x',
...           'B': 'y',
...           'C': 'x',
...           'D': 'z'}
>>> import functools
>>> functools.reduce(lambda d, k: [d.setdefault(my_map[k], []).append(k), d][1], my_map, {})
{'x': ['A', 'C'], 'y': ['B'], 'z': ['D']}

但是please个不要用这个.只需编写常规for循环.

Python相关问答推荐

Gekko:Spring-Mass系统的参数识别

scikit-learn导入无法导入名称METRIC_MAPPING64'

根据二元组列表在pandas中创建新列

Python虚拟环境的轻量级使用

在Python中计算连续天数

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

如何将数据帧中的timedelta转换为datetime

Discord.py -

如何按row_id/row_number过滤数据帧

按条件添加小计列

Python如何导入类的实例

Python日志(log)库如何有效地获取lineno和funcName?

pytest、xdist和共享生成的文件依赖项

将数字数组添加到Pandas DataFrame的单元格依赖于初始化

按条件计算将记录拆分成两条记录

.awk文件可以使用子进程执行吗?

合并Pandas中的数据帧,但处理不存在的列

如何在微调Whisper模型时更改数据集?

极地数据帧:ROLING_SUM向前看

保存由PYTHON在EXCEL中所做更改的问题