在列表中切换值的优雅方式
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]
我有一个多值元组列表。 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]