2015-09-02 3 views
-1

Я хочу, чтобы применить ниже заданных операций на моем питона словаре, в Python 2.6.9«ДИКТ» объект имеет

union = dict(set.union(*(set(service_configs[d].iteritems()) 
     for d in service_configs if service_configs[d]))).viewitems() 

intersection = dict(set.intersection(*(set(service_configs[d].iteritems()) 
       for d in service_configs if service_configs[d]))).viewitems() 
column_names = dict(union - intersection).keys() 

выше код работает в Python 2.7+ однако получение «Dict без атрибута«viewitems» 'объект не имеет атрибутов' viewitems ' с предыдущими версиями, кажется, что viewitems() не поддерживается. Я не уверен, как справиться с этим, чтобы сделать его версией python независимой.

+1

Вы можете использовать '.items' – jonrsharpe

+0

какую версию вы используете? –

+0

@PadraicCunningham Я использую python 2.7 для разработки, но я бы хотел, чтобы этот код работал для python версии 2.5+ –

ответ

2

dict.viewitems() создает живое множество объектов для всех пар (key, value) в словаре.

Поскольку все, что вам нужно сделать, это создать перекресток здесь, вы могли бы просто использовать наборы из dict.iteritems() последовательности вместо:

union = dict(set.union(*(set(service_configs[d].iteritems()) 
     for d in service_configs if service_configs[d])))  
intersection = dict(set.intersection(*(set(service_configs[d].iteritems()) 
       for d in service_configs if service_configs[d]))) 

column_names = dict(set(union.iteritems()) - set(intersection.iteritems())).keys() 

Как вы только ключи выше еще очень многословным способ сказать :

union = set.union(*(d 
     for d in service_configs.itervalues() if d))  
intersection = set.intersection(*(d 
     for d in service_configs.itervalues() if d)) 

column_names = list(union - intersection) 
+0

Не будет 'union = dict (set.union (* (set (d.iteritems()) для d в service_configs.itervalues ​​())))' будет одинаковым? –

+0

@PadraicCunningham: только если в 'service_configs' нет объектов' None' или других объектов false-y. –

Смежные вопросы