【问题标题】:Need to pull multiple values from python list comprehension?需要从 python 列表理解中提取多个值?
【发布时间】:2018-10-03 00:06:43
【问题描述】:

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

(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 是一个迭代器变量),我现在就可以提取这些值。我希望输出是(值,第二个元组编号)的元组列表,因此对于示例点,如果 item[0] 为 1111,则将是以下输出:

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

【问题讨论】:

    标签: python python-2.7 list list-comprehension


    【解决方案1】:

    这里的字典没有以良好的结构存储。必须迭代所有键/​​值才能进行一次查找,因此它是 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)]
    

    【讨论】:

    • 你知不知道我的实际字典有 180 万个条目(不要问这对我的其余工作来说是必需的),并且 O(1) 的恢复对于节省我的时间是至关重要的 :)
    猜你喜欢
    • 2019-04-03
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多