字典仅返回列表值中的最后一项
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]
我有 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]