Quantcast
Channel: Active questions tagged python - Stack Overflow
Viewing all articles
Browse latest Browse all 17303

python for loop over different lists not to be equal shows incorrect output

$
0
0

This is my python code:

statuses = [    {'id': '1', 'plan_id': '124124124', 'ip': '1.1.1.1', 'name': 'Saeed1', 'status': 'active'},    {'id': '2', 'plan_id': '124224124', 'ip': '2.2.2.2', 'name': 'Saeed2', 'status': 'suspended'},    {'id': '3', 'plan_id': '164124124', 'ip': '3.3.3.3', 'name': 'Saeed3', 'status': 'suspended'},    {'id': '4', 'plan_id': '164124124', 'ip': '4.4.4.4', 'name': 'Saeed4', 'status': 'suspended'},    {'id': '5', 'plan_id': '124124124', 'ip': '5.5.5.5', 'name': 'Saeed51', 'status': 'active'},]all_servers = [    {'id': '1', 'name': 'Saeed1', 'addresses': {'External_Network': [{'addr': '1.1.1.1'}]}, 'plan': 'planA', 'status': 'suspended'},    {'id': '2', 'name': 'Saeed2', 'addresses': {'External_Network': [{'addr': '6.6.6.6'}]}, 'plan': 'planB', 'status': 'suspended'},    {'id': '3', 'name': 'Saeed3', 'addresses': {'External_Network': [{'addr': '3.3.3.3'}]}, 'plan': 'planG', 'status': 'active'},    {'id': '4', 'name': 'Saeed4', 'addresses': {}, 'plan': 'planC', 'status': 'active'},    {'id': '5', 'name': 'Saeed5', 'addresses': {'External_Network': [{'addr': '8.8.8.8'}]}, 'plan': 'planA', 'status': 'suspended'},]all_plans = [    {'name': 'planA', 'id': '124124124'},    {'name': 'planB', 'id': '124224124'},    {'name': 'planC', 'id': '164124124'},    {'name': 'planG', 'id': '174124124'},]tmp = []final = []for status in statuses:    for server in all_servers:        for plan in all_plans:            if status['id'] == server['id'] and status['id'] not in tmp:                tmp.append(status['id'])                if (status['plan_id'] != plan['id']) and (plan['name'] != server['plan']):                    final.append({'name': status['name'], 'code': 'plan_mismatch'})                if 'External_Network' not in server['addresses']:                    final.append({'name': server['name'], 'code': 'has no ip'})                else:                    for addr in server['addresses']['External_Network']:                        if addr['addr'] != status['ip']:                            final.append({'name': status['name'], 'code': 'ip_mismatch'})                if status['status'] != server['status']:                    final.append({'name': status['name'], 'code': 'status_mismatch'})                if status['name'] != server['name']:                    final.append({'name': status['name'], 'code': 'names_mismatch'})

This is the logic I'm having:

from `statuses` and `all_servers`, first check if `id` matches, then do this:1) if `status['plan_id'] != plan['id']` and also `plan['name'] != all['plan']`, print plan_mismatch2)+ if `status['name'] != all['name']`, print names_mismatch.3)+ if status['ip'] != all['addresses']['External_Network']['addr'], print ip_mismatch.4)+ if status['status'] != all['status'], print status_mismatch.

Based on the current final list, these are the issues that shouldn't be here, but I don't know why:

  1. {'name': 'Saeed2', 'code': 'plan_mismatch'}
  2. {'name': 'Saeed4', 'code': 'plan_mismatch'}

All of the bugs to be printed should be these:

  1. Saeed1 status_mismatch
  2. Saeed2 ip_mismatch
  3. Saeed3 plan_mismatch
  4. Saeed3 status_mismatch
  5. Saeed4 has no ip
  6. Saeed4 status_mismatch
  7. Saeed51 name_mismatch
  8. Saeed51 ip_mismatch
  9. Saeed51 status_mismatch

Viewing all articles
Browse latest Browse all 17303

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>