'dict'对象没有属性'viewitems'

时间:2015-09-02 12:33:08

标签: python dictionary

我想在我的python词典中应用以下set操作,在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()。 我不知道如何处理它使python版本独立。

1 个答案:

答案 0 :(得分: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)