Python中集合的不区分大小写的比较

我有两套(虽然我可以做清单,或其他):

a = frozenset(('Today','I','am','fine'))
b = frozenset(('hello','how','are','you','today'))

我想得到:

frozenset(['Today'])

或至少:

frozenset(['today'])

第二种选择是可行的,如果我小写我认为的一切,但我正在寻找一种更优雅的方式.有可能吗?

a.intersection(b) 

以不区分大小写的方式?

Django中的快捷方式也很好,因为我正在使用该框架.

下面的交集方法示例(我无法弄清楚如何在注释中获取此格式):

print intersection('Today I am fine tomorrow'.split(),
                    'Hello How a re you TODAY and today and Today and Tomorrow'.split(),
                    key=str.lower)

[(['tomorrow'], ['Tomorrow']), (['Today'], ['TODAY', 'today', 'Today'])]
最佳答案
这里的版本适用于任何一对迭代:

def intersection(iterableA, iterableB, key=lambda x: x):
    """Return the intersection of two iterables with respect to `key` function.

    """
    def unify(iterable):
        d = {}
        for item in iterable:
            d.setdefault(key(item), []).append(item)
        return d

    A, B = unify(iterableA), unify(iterableB)

    return [(A[k], B[k]) for k in A if k in B]

例:

print intersection('Today I am fine'.split(),
                   'Hello How a re you TODAY'.split(),
                   key=str.lower)
# -> [(['Today'], ['TODAY'])]

转载注明原文:Python中集合的不区分大小写的比较 - 代码日志