正则表达式:从字符串列表创建字典

时间:2015-10-14 23:12:23

标签: python regex string list dictionary

我有一个很大的字符串列表,我想创建一个字典。

每个不同的单词都是一个键,值是单词在各种字符串的整个列表中出现的次数。

我还是Python新手,有点迷茫。我确信我必须做循环,我必须在其中:

  1. 检查下一个单词是否重复
  2. 维护迭代器以计算字典中每个单词存在的次数
  3. 如果我首先使用set()获取所有唯一的单词而不是循环遍历它们并计算频率怎么办?

    非常感谢任何建议

     [u'retw', u'folivi_jochan', u':', u'rt', u'newsycombinator', u':', u'uber',  u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from',  u'taxis', u'http', u':', u'//t.co/zluyq3f6cc'] [u'retw', u'chr1sa', u':', u'rt',  u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of',  u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':',  u'//t.co/zluyq3f6cc'] [u'retw', u'olutosinfashusi', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':', u'//t.co/zluyq3f6cc'] [u'retw', u'shakycode', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':', u'//t.co/zluyq3f6cc'] [u'an', u'interesting', u'read', u'manhattan', u'is', u'the', u'best', u'tv', u'show', u'that', u'hardly', u'anybody', u'is', u'watching', u'http', u':', u'//t.co/psfmauuwfg'] [u'tmr', u'am', u':', u'lunch', u'at', u'the', u'arts', u'!', u'from', u'11-2pm', u'at', u'1935', u'manhattan', u'beach', u'blvd', u'in', u'redondo', u'beach', u'!', u'map', u':', u'http', u':', u'//t.co/x6x2eeijbh'] [u's1', u'was', u'superb', u'.', u'``', u'manhattan', u'is', u'the', u'best', u'tv', u'show', u'that', u'hardly', u'anybody', u'is', u'watching', u"''", u'http', u':', u'//t.co/q6iazmtaam'] [u'taylor', u'swift', u'seen', u'leaving', u'msr', u'studios', u'in', u'manhattan', u'on', u'october', u'07', u',', u'2015', u'in', u'new', u'york', u',', u'new', u'york', u'.', u'http', u':', u'//t.co/3cwxrapr38'] [u'viva', u'a1054665', u'manhattan', u'acc', u'estimated', u'to', u'be', u'7', u'yrs', u'old', u'american', u'staff', u'mix', u',', u'white', u'/', u'brown', u',', u'spayed', u'female', u'...', u'http', u':', u'//t.co/sloopljyxq'] [u'#', u'3d', u'taevision', u"'showroom", u'in', u'the', u'night', u'#', u'porsche', u'996', u"'", u'#', u'automotive', u'#', u'fashion', u'#', u'makeup', u'#', u'ny', u'#', u'nyc', u'#', u'manhattan', u'http', u':', u'//t.co/eftvytqedk']
    

    谢谢

2 个答案:

答案 0 :(得分:4)

对于python 2.7及更高版本,使用Counter module中的collections

from collections import Counter
mylist = [u'retw', u'folivi_jochan', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':', u'//t.co/zluyq3f6cc', u'retw', u'chr1sa', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':', u'//t.co/zluyq3f6cc', u'retw', u'olutosinfashusi', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of']
c = Counter(mylist)
print dict(c)
[(u':', 8),
 (u'rt', 3), 
 (u'uber', 3), 
 (u'newsycombinator', 3), 
 (u'of', 3), 
 (u'is', 3), 
 (u'retw', 3), 
 (u'taking', 3), 
 (u'millions', 3), 
 (u'from', 2), 
 (u'//t.co/zluyq3f6cc', 2), 
 (u'manhattan', 2), 
 (u'away', 2),
 (u'http', 2),
 (u'taxis', 2), 
 (u'rides', 2),
 (u'olutosinfashusi', 1),
 (u'chr1sa', 1), 
 (u'folivi_jochan', 1)]

如果您有三个单独的列表,请尝试使用chain中的itertools

one,two,three = [u'retw', u'folivi_jochan', u':', u'rt', u'newsycombinator', u':', u'uber',   u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':', u'//t.co/zluyq3f6cc'],[u'retw', u'chr1sa', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of', u'manhattan', u'rides', u'away', u'from', u'taxis', u'http', u':', u'//t.co/zluyq3f6cc'], [u'retw', u'olutosinfashusi', u':', u'rt', u'newsycombinator', u':', u'uber', u'is', u'taking', u'millions', u'of']
from itertools import chain
from collections import Counter
c=Counter(chain(one,two,three))

Counter是一个高性能类,用于计算iteratables中元素的出现次数。其most_common()方法返回tuple s (element,count)的列表。 此元组列表可用于构造dict

答案 1 :(得分:0)

替代方法,使用for循环:

for word in strings:
if word not in dict.keys():
    dict[word]=1
else:
    dict[word] += 1

以上假定string是您想要迭代的单词列表。