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



我有两个列表作为输入:

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

我想在不导入任何库的情况下使用词典理解来生成以下输出,通过使用字符串格式将关键字设置为"会话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))}

但它给我的回报是:

{'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{}的字符串键的字典,并检查该字典是否具有整数键,而它总是没有整数键,因此在else之后才具有整数键。当相同的整数出现时,它会更新值,这就是为什么您看到最后一个更新的值。出于性能和可读性的原因,我不建议使用dict理解来做你想做的事情,但如果你真的想,请尝试(未测试(:

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]

最新更新