python - 需要从 python 列表理解中提取多个值?

标签 python python-2.7 list list-comprehension

我有一本带有元组键的字典,如下所示:

(1111, 3454): 34.55555
(1123, 4665): 67.12
(1111, 9797): 5.09

我需要进行列表理解,以获取具有匹配的第一个元素的所有条目的值。 问题是,我还需要元组的第二个值...

interimlist = [v for k,v in mydict.items() if k[0]==item[0]]

如果元组的第一个元素正确(项目是迭代器变量),那么我现在就可以提取值。我希望输出是(值,第二个元组编号)的元组列表,因此通过示例点,如果 item[0] 为 1111,则输出将是以下输出:

[(34.55555, 3454), (5.09, 9797)]

最佳答案

这里的字典没有以良好的结构存储。必须迭代所有键/​​值才能进行一次查找,因此检索的时间复杂度为 O(n)。

您应该对数据进行一次重新键入,在字典中添加另一层嵌套:

>>> d
{(1111, 3454): 34.55555, (1123, 4665): 67.12, (1111, 9797): 5.09}
>>> d_new = {}
>>> for (k1, k2), v in d.items():
...     if k1 not in d_new:
...         d_new[k1] = {}
...     d_new[k1][k2] = v

现在,O(1) 查找已恢复:

>>> d_new[1111]
{3454: 34.55555, 9797: 5.09}
>>> [item[::-1] for item in d_new[1111].items()]
[(34.55555, 3454), (5.09, 9797)]

关于python - 需要从 python 列表理解中提取多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49972705/

相关文章:

python - 如何在 Python 2 中将字符串转换为字节

Python变量列表人口

list - 避免使用集合!进入函数式编程风格算法

java - Android:向左滑动以将另一个元素添加到列表中

python - 为什么 float64 允许 NA,而 int32 不允许?

python - 带有 GEKKO 的轨迹规划器无法处理给定的目标速度

Python 亚马逊产品 API : Module not found error

python - Pandas 安装需要 NumPy 1.6.1

Python 3 虚拟环境导入错误 : No module named djangocms_admin_style

python - 将 lambda 函数应用于列在 pandas 中失败