将列表与元组进行比较

时间:2014-02-26 17:17:24

标签: python list

寻找最佳方法:

所以我有一个包含unicode字符串的列表,让我们调用这个listA

我有一个元组列表,每个元组包含一个unicode字符串和一个整数,让我们调用这个listB

我需要做的是在listB的元组中找到listA中的每个字符串。如果找到它,则递增该元组中的整数。

通过创建一个新的元组列表,我可以想到很多方法,但我不相信这是最好的方法。

感激地收到任何帮助

2 个答案:

答案 0 :(得分:3)

您应该使用collections.Counter

>>> from collections import Counter
>>> listA = ['a', 'b', 'c', 'a', 'c']
>>> listB = [('a', 5), ('b', 10), ('c', 0)]

首先将listB转换为Counter对象:

>>> c = Counter(dict(listB))
>>> c
Counter({'b': 10, 'a': 5, 'c': 0})

现在使用listA的计数更新它:

>>> c.update(listA)
>>> c
Counter({'b': 11, 'a': 7, 'c': 2})

答案 1 :(得分:0)

使用collections.Counter,你会得到结果为字典:

from collections import Counter
txt = """Looking for the best way of doing this: 
    So i have a list containing unicode strings, lets call this listA I 
    have a list of tuples, each of the tuples contains a unicoe string 
    and an integer...
""".split() # this gives list of words

counter = Counter(txt)
for word, count in counter.items():
    print "{}: {}".format(word, count)

实际上counter.items()为您提供了所需的元组。 计数器为您提供更多,尝试像counter.most_common()[:10]这样的东西,玩得开心。

[编辑]当然以后您可以使用counter.update(another_list_of_words)增加值。