我有两本字典。我正在一个又一个地迭代它。 我想在每次在内循环内而不是从头开始迭代时选择下一个项目。
dict1={'a':1 , 'b':2 , 'c':3}
dict2={'x':10, 'y':20, 'z':30}
for key,value in dict1:
#do something
for k,v in dict2:
#do something
当key='a'时,它会遍历内循环,并根据该循环中的代码做一些 Action 。假设它选择的 Action 是dict2中的'x'。 现在,当我必须使用 key='b' 进行迭代时,我希望内部循环的迭代从 'y' 开始,因为已经选择了 'x'。
最佳答案
首先,for key,value in dict1 不会执行您想要的操作 — 它只是遍历 键。如果你想遍历键值对,你需要for key, value in dict1.items()。
与此同时,听起来您要求的是锁步迭代,而不是嵌套迭代?如果是这样,您需要 zip 函数:
for (k1, v1), (k2, v2) in zip(dict1.items(), dict2.items()):
# do something
但请注意,这给您的排序实际上是任意的,因为字典的排序本质上是任意的。所以,如果您对 ('a', 'x') 感到满意,那么 ('b', 'y') 等等,以及 也满意('a', 'y'),然后是('b', 'x'),然后是zip 是你想要的。如果不是,那就不是。
(如果您希望您的 dict 具有某些固有顺序,例如插入顺序、排序顺序或其他任何顺序,您将不得不使用不同的类。例如,collections.OrderedDict 就像一个字典,但保持插入顺序。)
如果您想要更复杂的东西,您可以通过编程方式将迭代移动到 dict2 上,而您无法用单行代码表达,您始终可以使用 iteration protocol手动:
iter2 = iter(dict2.items())
for k1, v1 in dict1.items():
k2, v2 = next(iter2)
# do something
# maybe do another k2, v2 = next(iter2)
# maybe restart iter2 = iter(dict2.items())
# and so on
正如文档所解释的那样,当 next(iter2) 结束时,它将引发 StopIteration。如果你不想那样怎么办?也许你想,正如你在评论中所建议的那样,重新开始?您可以通过捕获 StopIteration 或使用 next 的双参数形式并检查哨兵来解决该问题。例如:
try:
k2, v2 = next(iter2)
except StopIteration:
iter2 = iter(dict2.items())
k2, v2 = next(iter2)
或者您甚至可以编写循环迭代包装器:
def circular_iterate(iterable_factory):
while True:
yield from iterable_factory():
在 Python 3.2 或更早版本中,您必须将 yield from 替换为内部循环:
def circular_iterate(iterable_factory):
while True:
for value in iterable_factory():
yield value
现在:
iter2 = circular_iterate(dict2.items) # note, not dict2.items()
如果您尝试跟踪的不仅仅是“当前位置”,您可能需要一个额外的数据结构。例如,如果您想跳过到目前为止看到的所有键,请使用到目前为止看到的 set 键,或未看到的set 键:
seen_items_2 = set()
for k1, v1 in dict1.items():
for k2, v2 in dict2.items():
if k2 in seen_items_2:
continue
seen_items_2.add(k2)
# do something
关于python遍历字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21319774/
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg