在lis中切换值的优雅方式

2024-09-25 08:41:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个多值元组列表。目标是基于变量值更改元组。有没有一个优雅的方法可以做到这一点。最简单的方法是强制执行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来切换日历元组,这个变量可以接受很多值。Python的方式是什么。你能帮我吗?你知道吗

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


Tags: 方法目标列表ifmainusernameareacalendar
2条回答

你可以通过理解和功能来实现:

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]

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

相关问题 更多 >