如何使用字典推导式将两个列表合并为嵌套字典?
用字典推导式将两个列表合并为嵌套字典
现有两个列表:
dates = ['2023-04-01', '2023-04-07', '2023-04-17', '2023-04-19', '2023-04-25'] events_name = [ 'PyTexas', 'PyCamp Spain', 'PyData Berlin', 'PyCon US', 'PyLadies Amsterdam']
需要合并成如下格式的嵌套字典:
python_events = { 0: {'time': '2023-04-01', 'name': 'PyTexas'}, 1: {'time': '2023-04-07', 'name': 'PyCamp Spain'}, 2: {'time': '2023-04-17', 'name': 'PyData Berlin'}, 3: {'time': '2023-04-19', 'name': 'PyCon US'}, 4: {'time': '2023-04-25', 'name': 'PyLadies Amsterdam'}}
已通过循环实现:
python_events = {} for i in range(0, len(dates)): python_events[i] = {"time": dates[i], "name": events_name[i]}
尝试用字典推导式但失败,比如:
python_events = { i: {"time": date, "name": name for date, name in dict(foo).items()} for i, date, name in range(0, len(events))}
正确实现方式
直接用*enumerate*结合*zip*就能写出简洁的字典推导式:
python_events = { idx: {"time": date, "name": event} for idx, (date, event) in enumerate(zip(dates, events_name)) }
代码说明
zip(dates, events_name):把两个列表的元素按位置一一配对,生成('2023-04-01', 'PyTexas')这类元组。enumerate(...):为每一组配对元素添加索引,得到(0, ('2023-04-01', 'PyTexas'))这样的结构。- 外层推导式:遍历每个带索引的配对,用
idx作为外层字典的键,直接构造包含time和name的子字典即可。
之前写法的问题
range(0, len(events))只能生成单个索引值,无法同时获取date和name,必须用zip关联两个列表的对应元素。- 内层的字典推导完全多余,这里不需要循环,直接写
{"time": date, "name": event}就能构造子字典。
内容的提问来源于stack exchange,提问作者duukn
相关产品推荐
相关产品推荐

