我有一个多值元组列表。目标是根据变量值更改元组。有一种优雅的方式来做到这一点。最简单的方法是强制使用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方式这样做。列表理解能有效吗?
约束:我无法更改数据结构。它必须是元组列表
答案 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]