如何将嵌套列表映射到 Python 中的可迭代字典

Posted

技术标签:

【中文标题】如何将嵌套列表映射到 Python 中的可迭代字典【英文标题】:How to map a nested list to a iterable dictionary in Python 【发布时间】:2021-10-28 04:39:45 【问题描述】:

我有一个类列表及其先决条件存储在配对列表中:

classes = [
    ['Calculus', 'Geometry'],
    ['Trigonometry', 'Algebra'],
    ['Geometry', 'Trigonometry']
]

我想将这些课程映射到特定的索引,以使用以下方式为课程构建图表:

course_index = 
    0: 'Calculus'
    1: 'Geometry' 
    2: 'Trigonometry'
    3: 'Algebra'

获取新的整数映射mapped_classes = [[0,1],[2,3],[1,2]]

为了创建course_index,我创建了一个空索引dict,并添加了classes 中不存在于course_index 中的项目

course_index = key: "" for key in range(4)

index = 0
for x, y in classes:
    if x not in course_index.values(): 
        course_index[index] = x
        index += 1
    if y not in course_index.values(): 
        course_index[index] = y
        index += 1

我想不通的是如何将classes 映射到它们对应的course_index 以创建mapped_classes

是否有一些映射功能可以简化这个过程?我解决这个问题的尝试如下,我无法改变当前类列表中的值。嵌套循环也非常低效。

for key, val in course_index: 
    for x, y in classes:
        if x = val: 
            x = key
        if y = val: 
            y = key

【问题讨论】:

【参考方案1】:

反转 course_index 字典。 枚举类。

invert = v: k for k, v in course_index.items()
for i, row in enumerate(classes):
    classes[i][0] = invert[classes[i][0]]
    classes[i][1] = invert[classes[i][1]]
print(classes)

【讨论】:

【参考方案2】:

尝试使用类似的东西:

mapped_classes = classes.copy()
for key, val in course_index.items():
    for e, f in enumerate(classes):
        for x in f:
            if x == val:
                mapped_classes[e][mapped_classes[e].index(x)] = key
print(mapped_classes)

【讨论】:

以上是关于如何将嵌套列表映射到 Python 中的可迭代字典的主要内容,如果未能解决你的问题,请参考以下文章

Python 字典items返回列表,iteritems返回迭代器

将字典列表中的值映射到 Python 中的字符串

如何将 Python 字典映射到大查询模式

通过嵌套json递归迭代python中的特定键

Python - 将字典列表附加到嵌套的默认字典时出现关键错误

列表中的嵌套字典到数据框python