Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要从python列表中提取多个值吗?_Python_Python 2.7_List_List Comprehension - Fatal编程技术网

需要从python列表中提取多个值吗?

需要从python列表中提取多个值吗?,python,python-2.7,list,list-comprehension,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是一个迭代器变量),那么我现在就可以提取这些值。我希望输出是(值,第二个元组编号)的

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

(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)]

这里的dict不是以良好的结构存储的。为了进行一次查找,必须迭代所有键/VAL,因此这是O(n)检索

您应该一次性重新键入数据,在dict中添加另一层嵌套:

>>> 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)的恢复对我的时间很关键:)