根据给定条件映射两个字典列表

时间:2020-04-14 16:55:39

标签: python list dictionary

我有两个字典列表,想根据条件进行比较并打印列表的值。

dest = [{'pin': 0,
 'cpin': 0,
 'lst': ['id1_1',
        'id1_2',
        'id1_3']},

    {'pin': 0,
     'cpin': 1,
     'lst': ['id2_1',
        'id2_2',
        'id2_3',
        'id2_4']}
]

    src = [
 {'data': ['1001'],
    'pin':0
    'cpin': 0,
  'name':'single_data_a'},

 {'data': ['1002',
           '1003'],
   'pin':0
   'cpin': 0,
   'name': 'Large_data_1'},

 {'data': ['2001',
           '2002',
           '2003'],
   'pin':0
   'cpin': 1,
   'name': 'Large_data_2'}
  }]

输出:要打印数据:比较两个字典列表 如果两个字典都满足条件,则打印这些值。

例如:dest和src中的pin和cpin匹配,然后从dest中打印出第一个值,并打印src中的数据

single_data_a
        1001
        id1_1

        large_data_1
        1002
        id1_2

        large_data_1
        1003
        id1_3

        Large_data_2
        2002
        id2_1

        Large_data_2
        2003
        id2_2

我尝试过的代码:对于第二个列表,它不是从id2_1开始的

for b, i in enumerate(src):
        for c, j in enumerate(dest, b):

            get_pin = i.get('pin')
            get_cpin= i.get('cpin')
            for l in i.get('lst'):
                if int(get_pin) == int(j.get('get_pin')) and int(get_cpin) == int(j.get('get_cpin')):
                    print(l)
                    print(j.get('lst')[c])
                    print(i.get('name')
                    c = c + 1

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情。

>>> for d in dest:
...   for s in src:
...     if d['cpin'] == s['pin'] and d['pin'] == s['pin']:
...       for data, l in zip(s['data'], d['lst']):
...         print(s['name'])
...         print(data)
...         print(l)


single_data_a
1001
id1_1
Large_data_1
1002
id1_1
Large_data_1
1003
id1_2
Large_data_2
2001
id1_1
Large_data_2
2002
id1_2
Large_data_2
2003
id1_3