【问题标题】:Comparing and accessing values from list of dictionaries比较和访问字典列表中的值
【发布时间】: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


【解决方案1】:

一个想法可能是在 Python 中使用 zip 函数。此函数返回一个元组列表,其中第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素。这可以帮助您迭代元素:

for thiselem,nextelem in zip(li, li[1 : ] + li[ : 1]):

请注意,唯一的区别是最后一次迭代会将您作为thislem 列出您列表中的最后一个元素,并将“nextelement”作为第一个元素。

以下是关于您的数据的示例:

for thiselem,nextelem in zip(start_sequence, start_sequence[1 : ] + start_sequence[ : 1]):
  print('THIS: ' + str(thiselem))
  print('NEXT: ' + str(nextelem) + '\n')

结果

这个:{'server': 'server1', 'order': 1} 下一个: {'server': 'server2', “订单”:1}

这个:{'server': 'server2', 'order': 1} 下一个: {'server': 'server3', “订单”:1}

这个:{'server': 'server3', 'order': 1} 下一个: {'server': 'server4', “订单”:2}

这个: {'server': 'server4', 'order': 2} 下一个: {'server': 'server5', “订单”:3}

这个:{'server': 'server5', 'order': 3} 下一个: {'server': 'server1', “订单”:1}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-20
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多