比较两个列表中的值并将其更新到字典

时间:2015-10-19 13:25:04

标签: python dictionary

我有一个包含以下值的词典,其中包含航空公司代码及其 perror 号码。

peq = {
  'sg':{'code':9, 'perror':0},
  '6e':{'code':17, 'perror':0},
  'g8':{'code':25, 'perror':0},
  'i7':{'code':33, 'perror':0},
  '9h':{'code':41, 'perror':0},
  'it':{'code':49, 'perror':0},
  'ic':{'code':57, 'perror':0},
  '9w':{'code':65, 'perror':0},
  's2':{'code':73, 'perror':0},
  'ai':{'code':81, 'perror':0}
}

我有一个变量如下所示。 perrors 包含错误代码, acode 是航空公司代码,类似于上面 peq 字典

中提到的代码
perrors = ['0', '281', '2', '16', '0', '0', '2', '0', '0', '1']
acode = [41, 65, 17, 81, 73, 57, 9, 49, 33, 25]

然后我在字典

中压缩了上面的两个列表
>>> ic = dict(zip(acode,perrors))
>>> ic
{65: '281', 25: '1', 49: '0', 81: '16', 41: '0', 17: '2', 9: '2', 73: '0', 57: '0', 33: '0'}
>>>

现在我要解决的是通过比较ic代码(左侧)和右侧的值来更新 peq 字典中提到的 perror 在peq“perror”中。

很抱歉,如果我不清楚,但简而言之,我想更新perror词典中提到的peq的所有值,并使用ic中提到的右侧值字典,但首先它需要比较代码是否存在于peq中,如果确实存在,则更新其perrorpeq字典)ic值。

1 个答案:

答案 0 :(得分:1)

您需要迭代dict并使用压缩list中的正确密钥:

import pprint

peq = {
'sg':{'code':9, 'perror':0},
'6e':{'code':17, 'perror':0},
'g8':{'code':25, 'perror':0},
'i7':{'code':33, 'perror':0},
'9h':{'code':41, 'perror':0},
'it':{'code':49, 'perror':0},
'ic':{'code':57, 'perror':0},
'9w':{'code':65, 'perror':0},
's2':{'code':73, 'perror':0},
'ai':{'code':81, 'perror':0}
}

perrors = ['0', '281', '2', '16', '0', '0', '2', '0', '0', '1']
acode = [41, 65, 17, 81, 73, 57, 9, 49, 33, 25]    
ic = dict(zip(acode,perrors))

for k, v in peq.items():
    try:
        v['perror'] = ic[v['code']]
    except KeyError:
        print 'failed to find code {} at ic zip'.format(v['code'])

pprint.pprint(peq)

输出:

{'6e': {'code': 17, 'perror': '2'},
 '9h': {'code': 41, 'perror': '0'},
 '9w': {'code': 65, 'perror': '281'},
 'ai': {'code': 81, 'perror': '16'},
 'g8': {'code': 25, 'perror': '1'},
 'i7': {'code': 33, 'perror': '0'},
 'ic': {'code': 57, 'perror': '0'},
 'it': {'code': 49, 'perror': '0'},
 's2': {'code': 73, 'perror': '0'},
 'sg': {'code': 9, 'perror': '2'}}