Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List_Dictionary_Iteration - Fatal编程技术网

python:一次遍历列表中的两个对象

python:一次遍历列表中的两个对象,python,list,dictionary,iteration,Python,List,Dictionary,Iteration,通过python调用SQL db,返回列表中成对字典的输出: [{'Something1A':Num1A}, {'Something1B':Num1B}, {'Something2A':Num2A} ...] 我想遍历这个列表,但同时提取两个字典 我知道,对于obj1,obj2 in不是正确的方法,但是什么是呢?在这里使用 不使用zip的备选方案: 使用索引从列表中获取两个元素 testList = [{'2': 2}, {'3':3}, {'4':4}, {'5':5}] for i in

通过python调用SQL db,返回列表中成对字典的输出:

[{'Something1A':Num1A}, {'Something1B':Num1B}, {'Something2A':Num2A} ...]
我想遍历这个列表,但同时提取两个字典

我知道,对于obj1,obj2 in不是正确的方法,但是什么是呢?

在这里使用

不使用zip的备选方案:


使用索引从列表中获取两个元素

testList = [{'2': 2}, {'3':3}, {'4':4}, {'5':5}]
for i in range(0,len(testList),2):
    print(testList[i],testList[i+1])
寻找“石斑鱼”,你会使用n=2

import itertools
def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return itertools.izip_longest(fillvalue=fillvalue, *args)

您可以使用zip和列表上的迭代器来执行此操作:

>>> dicts = [{'1A': 1}, {'1B': 2}, {'2A': 3}, {'2B': 4}]
>>> for obj1, obj2 in zip(*[iter(dicts)]*2):
    print obj1, obj2


{'1A': 1} {'1B': 2}
{'2A': 3} {'2B': 4}

我相信在iterable中分组项的Python习惯用法是

zip(*[iter(iterable)])*n)
其中iterable是您的字典列表,n是2,如果您希望它们以2为一组

然后,解决方案将如下所示

>>> data = [{'A':1}, {'B':2}, {'C':3}, {'D':4}]
>>> for dict1, dict2, in zip(*[iter(data)]*2):
    print dict1, dict2


{'A': 1} {'B': 2}
{'C': 3} {'D': 4}
>>> 
这不依赖于切片,这意味着它的内存效率更高,而且可能更快,因为在本例中,zip正在“压缩”的两个序列是通过iterdata动态生成的,这意味着一次而不是三次,第一次切片为1次,第二次切片为1次,zip为1次

如果由于某种原因,您的数据非常大,那么您可能不想构建一个全新的元组列表,zip只需返回一次即可。在这种情况下,您可以使用itertools.izip代替zip。

只需

在Python 2中

li = [{'Something1A':10}, {'Something1B':201}, {'Something2A':405} ]
from itertools import imap
for a,b in imap(lambda x: x.items()[0], li):
    print a,b

在Python3中,map已经是一个生成器

列表切片生成一个全新的列表。那会占用更多的空间。更好地使用索引。检查我的代码。您的代码将打印{'2':2},{'3':3},{'4':4},您需要将其更改为范围0中的i,lentestList,2:printtestList[i],testList[i+1]oops!我想是时候小睡一下了!:你可能想把你的反对票拿下来,伙计!这些家伙甚至没有留下评论为什么他们投了否决票!无论如何@Sukrit谢谢你指出我的错误。Suggsestion:也许可以链接到Python3的zip文档?一个有经验的pythonista可能会马上意识到他们在看python2文档,但我是n00b,我没有。如果您检查此项,请提前感谢!我很确定他想要1A,1B,2A,2B等等,而不是1A,1B,1B,2A等等。啊,是的。谢谢固定的
zip(*[iter(iterable)])*n)
>>> data = [{'A':1}, {'B':2}, {'C':3}, {'D':4}]
>>> for dict1, dict2, in zip(*[iter(data)]*2):
    print dict1, dict2


{'A': 1} {'B': 2}
{'C': 3} {'D': 4}
>>> 
li = [{'Something1A':10}, {'Something1B':201}, {'Something2A':405} ]
from itertools import imap
for a,b in imap(lambda x: x.items()[0], li):
    print a,b