在列表中切换值的优雅方式

Elegant way of switching values inside a list

我有一个多值元组列表。 objective 是根据变量值更改元组。有没有一种优雅的方法来做到这一点。最简单的方法是暴力破解 if-elseif 语句,但这会使代码冗长且重复。

list = [
    ('category',  'Categories',   personal_categories_page(user=userName),  'Show categories'),
    ('calendar',  'Calendar',     person_calendar(userName), 'Calendar View for %s' %displayName),
    ('user_area', 'Main User Db', user_area_mode(userName), 'Main User Area'),
]

假设在这种情况下,我想根据可以采用很多值的外部变量显示名称来切换日历元组。这样做的 pythonic 方式是什么。列表理解有用吗?

Constraint: 我不能改变数据结构。它必须是一个元组列表

pythonic 解决方案是将它们存储在更合适的数据结构中,例如字典。那么改变个别项目就很简单了。

pages = {
    'category':  ('Categories',   personal_categories_page(user=userName),  'Show categories'),
    'calendar':  ('Calendar',     person_calendar(userName), 'Calendar View for %s' %displayName),
    'user_area': ('Main User Db', user_area_mode(userName), 'Main User Area'),
}

你可以通过理解和函数来做到这一点:

def transform(t):
    if <this is not a tuple to be messed with>:
        return t
    return <mangled tuple>

list2 = [transform(x) for x in list1]

或者如果test和transform特别简单,全部内联:

list2 = [(<transformed x> if <test> else x) for x in list1]