【发布时间】:2018-02-27 08:56:09
【问题描述】:
我是一名 IT 管理员,正在尝试学习 Python 3.x 中的一些脚本。所以请原谅我暂时缺乏知识。 :-)
我有一个字典列表(start_sequence 变量)。我想比较列表中相邻字典之间的键值,所以我写了这段代码:
start_sequence = [{'server': 'server1', 'service': 'service1', 'startup': 'Automatic', 'os': 'Windows', 'order': 1},
{'server': 'server2', 'service': 'service2', 'startup': 'Automatic', 'os': 'Windows', 'order': 1},
{'server': 'server3', 'service': 'service2', 'startup': 'Automatic', 'os': 'Windows', 'order': 1},
{'server': 'server4', 'service': 'service3', 'startup': 'Automatic', 'os': 'Windows', 'order': 2},
{'server': 'server5', 'service': 'service4', 'startup': 'Automatic', 'os': 'Windows', 'order': 3}]
for i in range(0, len(start_sequence) - 1):
print('i=', i, ':', start_sequence[i]['server'], start_sequence[i]['service'])
if start_sequence[i]['order'] != start_sequence[i + 1]['order']:
print('delay')
print('i=', len(start_sequence) - 1, ':', start_sequence[len(start_sequence) - 1]['server'],start_sequence[len(start_sequence) - 1]['service'])
在这个阶段,这只是打印列表中的服务器和服务,并根据顺序键的差异设置“延迟”(某些服务需要等到之前的服务启动并运行)。
老实说,我不太喜欢这个循环。它有效,但我敢打赌它可以写得更好。例如,我不喜欢循环后的这一行,只是为了解决“列表索引超出范围”问题。你有什么提示可以优化吗?
【问题讨论】:
-
你能添加任何示例输入和输出吗?
-
老实说,如果您要将每个项目与下一个项目进行比较,您需要检查是否超出范围。否则,您可以执行
for item in start_sequence,仅在第一次跳过其余代码,将当前项存储在一个变量中,并在下一次迭代中将该变量与循环所采用的新项进行比较 -
在 Pythonland 中,处理索引位置可能会让你被捕。
-
@VikasDamodar 我刚刚将它们添加到主帖中,对此感到抱歉。
-
@Shinratensei 你是这个意思吗? -> pastebin.com/TSdu0KTL
标签: python python-3.x list dictionary