替换包含相同答案的嵌套列表中的项目



我有一个看起来像这样的嵌套列表:

data = [
['student 1', '"answer 0"', '"answer 2"', '"answer 2"', '"answer 0"'],
['student 2', '"answer 4"', '"answer 2"', '"answer 4"', '"answer 0"']]

我希望结果显示为:

data = [
['student 1', 'Blue', 'Up', 'Left', 'Football'],
['student 2', 'Red', 'Up', 'Right', 'Football']]

根据列表中的索引,它可以具有不同的结果,但是在数据中可以包含相同的字符串。什么是完成此任务的有效方法?

您可以创建一个简单的[index, answer, replacement]替换映射,例如:

replacement_map = {
    1: {'"answer 0"': "Blue",  # replacements for index 1
        '"answer 1"': "Green",
        '"answer 2"': "Yellow",
        '"answer 3"': "Purple",
        '"answer 4"': "Red"},
    2: {'"answer 0"': "Right",  # replacements for index 2
        '"answer 1"': "Left",
        '"answer 2"': "Up",
        '"answer 4"': "Down"},
    3: {'"answer 0"': "Up",  # replacements for index 3
        '"answer 1"': "Down",
        '"answer 2"': "Left",
        '"answer 4"': "Right"},
    4: {'"answer 0"': "Football",  # replacements for index 4
        '"answer 1"': "Pocket billiard"}
}
data = [
    ['student 1', '"answer 0"', '"answer 2"', '"answer 2"', '"answer 0"'],
    ['student 2', '"answer 4"', '"answer 2"', '"answer 4"', '"answer 0"']
]
replaced_data = []  # we'll store our data here
for element in data:
    replaced_element = []
    for index, item in enumerate(element):
        if index in replacement_map:
            replaced_element.append(replacement_map[index].get(item, item))
        else:  # no replacement available for this index
            replaced_element.append(item)
    replaced_data.append(replaced_element)
# replaced_data contains:
# [['student 1', 'Blue', 'Up', 'Left', 'Football'],
#  ['student 2', 'Red', 'Up', 'Right', 'Football']]

如果您真的希望它效率尽可能高,可以通过列表理解来完成:

replaced_data = [[replacement_map.get(index, {}).get(item, item) for index, item in enumerate(element)] for element in data]

最新更新