简体   繁体   English

比较和访问字典列表中的值

[英]Comparing and accessing values from list of dictionaries

I'm IT administrator trying to learn some scripting in Python 3.x. 我是IT管理员,试图学习Python 3.x中的一些脚本。 so forgive me my lack of knowledge for now. 所以请原谅我现在的知识不足。 :-) :-)

I have a list of dictionaries ( start_sequence variable). 我有一个字典列表( start_sequence变量)。 I want to compare key values between neighbouring dictionaries in list, so I wrote this code: 我想比较列表中相邻字典之间的键值,所以我写了这段代码:

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'])

At this stage this is just to print servers and services from the list and to put a 'delay' basing on order key differences (some services will need to wait until previous are up and running). 在此阶段,这只是从列表中打印服务器和服务,并基于订单键差异(某些服务将需要等到之前的服务启动并运行)才进行“延迟”。

And to be honest I don't like this loop too much. 老实说,我不太喜欢这个循环。 It works but I bet it could be written better. 它可以工作,但是我敢打赌它可以写得更好。 For example I don't like this line after the loop just to fix 'list index out of range' issue. 例如,我不喜欢循环后仅此行来解决“列表索引超出范围”的问题。 Do you have any hints how this could be optimized? 您有什么建议可以对其进行优化吗?

An idea could be to use the zip function in Python. 一个想法可能是在Python中使用zip函数。 This function returns a list of tuples, where the i-th tuple contains the i-th element from each of the argument sequences or iterables. 此函数返回一个元组列表,其中第i个元组包含每个参数序列或可迭代对象中的第i个元素。 This could help you iterate the elements: 这可以帮助您迭代元素:

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

Note that the only difference is that the last iteration this will give you as thislem the last element in you list and as 'nextelement' the very first. 请注意,唯一的区别是,最后一次迭代将把您列表中的最后一个元素作为thislem将第一个作为“ nextelement”给您。

Here is an example on your data: 这是您的数据示例:

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

Result 结果

THIS: {'server': 'server1', 'order': 1} NEXT: {'server': 'server2', 'order': 1} 这:{'服务器':'服务器1','订单':1}下一个:{'服务器':'服务器2','订单':1}

THIS: {'server': 'server2', 'order': 1} NEXT: {'server': 'server3', 'order': 1} 这:{'server':'server2','order':1}下一页:{'server':'server3','order':1}

THIS: {'server': 'server3', 'order': 1} NEXT: {'server': 'server4', 'order': 2} 这:{'server':'server3','order':1}下一个:{'server':'server4','order':2}

THIS: {'server': 'server4', 'order': 2} NEXT: {'server': 'server5', 'order': 3} 这:{'server':'server4','order':2}下一页:{'server':'server5','order':3}

THIS: {'server': 'server5', 'order': 3} NEXT: {'server': 'server1', 'order': 1} 这:{'server':'server5','order':3}下一个:{'server':'server1','order':1}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM