Python 通过压缩两个重复列表来创建字典

Python 通过压缩两个重复列表来创建字典,python,Python,我有两份清单,如下所示: p = ['CRT6423', 'CIN1198C', 'CSS001', 'PP001', 'PS001', 'PL001', 'FIN1151A', 'FSS001', 'PP001', 'PS001', 'PL001', 'FIN1198A', 'FSS001'] q = [2, 6, 8, 4, 4, 4, 8, 12, 6, 6, 6, 36, 42] p中的元素是产品代码,q中的元素是相应的数量 我如何从这两个列表中制作一本字典,这两个列表类似于: p

我有两份清单,如下所示:

p = ['CRT6423', 'CIN1198C', 'CSS001', 'PP001', 'PS001', 'PL001', 'FIN1151A', 'FSS001', 
'PP001', 'PS001', 'PL001', 'FIN1198A', 'FSS001']

q = [2, 6, 8, 4, 4, 4, 8, 12, 6, 6, 6, 36, 42]
p
中的元素是产品代码,
q
中的元素是相应的数量

我如何从这两个列表中制作一本字典,这两个列表类似于:

p_q = {'CRT6423': 2,
 'CIN1198C': 6,
 'CSS001': 8,
 'PP001': 10,   #4+6
 'PS001': 10,   #4+6
 'PL001': 10,   #4+6
 'FIN1151A': 8,
 'FSS001': 54,   #12+42
 'FIN1198A': 36}
p_q = {}
for pv, qv in zip(p, q):
    if pv in p_q:
        p_q[pv] += qv
    else:
        p_q[pv] = qv

如果一个条目被重复,它应该被添加到值中,而不是替换它

您可以这样做:

p_q = {'CRT6423': 2,
 'CIN1198C': 6,
 'CSS001': 8,
 'PP001': 10,   #4+6
 'PS001': 10,   #4+6
 'PL001': 10,   #4+6
 'FIN1151A': 8,
 'FSS001': 54,   #12+42
 'FIN1198A': 36}
p_q = {}
for pv, qv in zip(p, q):
    if pv in p_q:
        p_q[pv] += qv
    else:
        p_q[pv] = qv

使用
collections.defaultdict

Ex:

from collections import defaultdict

p = ['CRT6423', 'CIN1198C', 'CSS001', 'PP001', 'PS001', 'PL001', 'FIN1151A', 'FSS001', 'PP001', 'PS001', 'PL001', 'FIN1198A', 'FSS001']
q = [2, 6, 8, 4, 4, 4, 8, 12, 6, 6, 6, 36, 42]
result = defaultdict(int)

for k, v in zip(p, q):
    result[k] += v

print(result)   # OR print(dict(result))
defaultdict(<class 'int'>,
            {'CIN1198C': 6,
             'CRT6423': 2,
             'CSS001': 8,
             'FIN1151A': 8,
             'FIN1198A': 36,
             'FSS001': 54,
             'PL001': 10,
             'PP001': 10,
             'PS001': 10})
输出:

from collections import defaultdict

p = ['CRT6423', 'CIN1198C', 'CSS001', 'PP001', 'PS001', 'PL001', 'FIN1151A', 'FSS001', 'PP001', 'PS001', 'PL001', 'FIN1198A', 'FSS001']
q = [2, 6, 8, 4, 4, 4, 8, 12, 6, 6, 6, 36, 42]
result = defaultdict(int)

for k, v in zip(p, q):
    result[k] += v

print(result)   # OR print(dict(result))
defaultdict(<class 'int'>,
            {'CIN1198C': 6,
             'CRT6423': 2,
             'CSS001': 8,
             'FIN1151A': 8,
             'FIN1198A': 36,
             'FSS001': 54,
             'PL001': 10,
             'PP001': 10,
             'PS001': 10})
defaultdict(,
{'CIN1198C':6,
“CRT6423”:2,
“CSS001”:8,
“FIN1151A”:8,
“FIN1198A”:36,
“FSS001”:54,
"PL001":10,,
"PP001":10,,
“PS001”:10})