Python style - 更简洁的表达式编写方式我想遍历

Python style - cleaner way of writing an expression I want to iterate over

我对编程还是很陌生,但是由于强调不要重复自己以及 Python 对可读性的强调,我想知道是否有更多 D.R.Y 方式 and/or 更简洁的方式来写这样的东西:

dicts = {
    0: set([u'comment', u'dates', u'mychild']), 
    1: set([u'comment', u'created', u'myroot'])
}

def compare_tags(set_dict):
    diff_list = set_dict[0].symmetric_difference(set_dict[1])

    for i in set_dict:
        if set(diff_list).intersection(set_dict[i]):
            diff = set(diff_list).intersection(set_dict[i])

compare_tags(dicts)

具体不重复set(diff_list).intersection(set_dict[i])

在我的上一个项目中(使用 BeautifulSoup)我同样重复了代码:

if address_block.find('div', attrs={'id': '1234'}):
        dl = address_block.find('div', attrs={'id': '1234'})
        pros = dict(zip([x.text for x in dl.find_all('dt')], [y.text for y in dl.find_all('dd')]))

但我发现我可以通过做这样的事情来提高它的可读性:

x = address_block.find('div', attrs={'id': '1234'})

if x:
    pros = dict(zip([x.text for x in x.find_all('dt')], [y.text for y in x.find_all('dd')]))

并在我使用它们之前堆叠变量 (x, ...)。

但是,在第一个示例中,因为我正在迭代 i in set_dict,我显然在分配之前通过引用 i 得到了 UnboundLocalError

任何减少重复的建议都将不胜感激。

提前致谢。

是这样的吗?

for i in set_dict:
    x = set(diff_list).intersection(set_dict[i])
    if x:
        diff = x