Python嵌套字典元素无序问题及Selenium输入库适配方案求助
解决Selenium输入库的元素顺序问题
问题根源
你的代码里info['answer']用的是集合{},集合是无序且元素唯一的数据类型,每次遍历的顺序都是随机的,这才导致依赖首个元素的逻辑失效。而外层的字典(包括keywords)在Python3.7及以上版本本身就是插入有序的,不需要额外处理。
解决方案
1. 将answer改为有序的列表
直接把answer的集合{'4', 'yes'}改成列表['4', 'yes'],列表会严格保留插入顺序,这样enumerate取到的第一个元素永远是'4',完全兼容现有逻辑。
修改后的代码:
qlib = { 'code_xp': {'keywords': {'javascript':0, 'web design':1, 'python':0}, 'answer': ['4', 'yes'] # 从集合改为列表 } } for prompt, info in qlib.items(): for t, i in enumerate(info['answer']): if t == 0: try: print(i) # 固定输出'4' except: pass
2. 关于keywords的结构兼容
- 若使用Python3.7+,普通字典默认保留插入顺序,
keywords的key:value结构无需修改,运行时会保持定义顺序。 - 若需兼容Python3.6及以下版本,可使用
collections.OrderedDict定义嵌套字典,写法如下,同样保留keywords的结构:
from collections import OrderedDict qlib = OrderedDict({ 'code_xp': OrderedDict({ 'keywords': OrderedDict({ 'javascript':0, 'web design':1, 'python':0 }), 'answer': ['4', 'yes'] # 依然用列表保证顺序 }) })
注意事项
不要用集合存储需要固定顺序的元素,集合的设计初衷是去重和快速查找,不保证顺序。如果需要有序且允许重复用列表,有序且去重用collections.OrderedDict(或Python3.7+的字典配合dict.fromkeys)。
内容的提问来源于stack exchange,提问作者Zane Baylon
相关产品推荐
相关产品推荐

