字典仅返回列表值中的最后一项

Dictionary returning only the Last Item in List Value

我有 2 个列表作为输入:

A = ['A', 'B', 'C', 'D', 'E']
sessionid = [1, 1, 3, 2, 2]

我想在不导入任何库的情况下使用词典理解生成以下输出,使用字符串格式将键设为'Session x':

{'Session 1': ['A','B'], 'Session 2': ['D','E'], 'Session 3': ['C']}

我试过这个代码:

dictb = {'Session {}'.format(session): [a if session not in dictb.keys() else [a]] for a,session in list(zip(A,sessionid))}

但它 returns 我这个:

{'Session 1': ['B'], 'Session 3': ['C'], 'Session 2': ['E']}

我觉得if-else statement理解有问题。我该如何改进?

这是一个可能的解决方案:

dictb = {f'Session {k}': [v for v, i in zip(A, sessionid) if k == i]
         for k in sorted(set(sessionid))}

输出:

{'Session 1': ['A', 'B'], 'Session 2': ['D', 'E'], 'Session 3': ['C']}

这是因为您正在生成一个字典,其中包含格式为 Session{} 的字符串键,并检查字典是否有整数键,它总是没有整数键,因此在 [=13 之后=].当出现相同的整数时,它会更新该值,这就是您看到最后更新值的原因。出于性能和可读性的原因,我不建议使用字典理解来做你想做的事,但如果你真的想这样做,请尝试(未测试):

dictb = {'Session {}'.format(session): [dictb['Session {}'.format(session)] + [a] if 'Session {}'.format(session) not in dictb.keys() else [a]] for a,session in list(zip(A,sessionid))}

推荐的方法是:

dictb = {}
for a, session in zip(A, sessionid):
    key = 'Session {}'.format(session)
    if key in dictb:
        dictb[key].append(a)
    else:
        dictb[key] = [a]