2017-01-06 5 views
0

У меня есть следующие OrderedDictкортежей в OrderedDict

activities = OrderedDict([('eating',(1,False)),('drinking',(2,True)),('breathing',(3,True)),('talking',(4,False)),('walking',(5,False))]) 

Я хочу быть в состоянии иметь возможность запускать функцию в обратном True/False часть конкретной записи.

до сих пор у меня есть следующие:

def updateactivity(activity): 
    activities = OrderedDict([(k, (1,False)) if k == activity else (k, v) for k, v in activities.items()]) 

Что делает хорошо, чтобы переключить значение false. Есть ли более элегантный способ просто изменить True/False в любом направлении?

ответ

0

Распакуйте значение каждого предмета на две переменные/имена, а затем восстановите с помощью not.

d = collections.OrderedDict() 
for k, (a,b) in activities.items(): 
    d[k] = (a, not b) 

или

collections.OrderedDict((k,(a, not b)) for k, (a,b) in activities.items()) 
+0

'd [к] = (d [к] [0], а не d [к] [1])' – IanAuld

+0

@IanAuld, я не понимаю ваш комментарий , Вы предлагаете добавить это к моему ответу в качестве альтернативного решения? – wwii

+0

Нет, ОП задал в недавно удаленном комментарии по этому поводу, как сделать это только для одной записи, а не для всех. Я обращался к этому. Не знаю, почему они удалили комментарий. – IanAuld