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

时间:2015-02-26 19:16:53

标签: python list tuples

我有一个多值元组列表。目标是根据变量值更改元组。有一种优雅的方式来做到这一点。最简单的方法是强制使用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'),
]

让我们说在这种情况下,我想根据外部变量displayname切换日历元组,这可能需要很多值。什么是pythonic方式这样做。列表理解能有效吗?

约束:我无法更改数据结构。它必须是元组列表

2 个答案:

答案 0 :(得分:4)

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'),
}

答案 1 :(得分:1)

你可以通过理解和功能来做到这一点:

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]

或者如果测试和转换特别简单,则全部内联:

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