【问题标题】:Extracting only one specified word from list of lists从列表列表中仅提取一个指定的单词
【发布时间】:2020-06-19 00:35:19
【问题描述】:

我有以下列表:

my_list=[['12,5', 'users'],
 ['12,5', 'users'],
 ['1,35', 'giga'],
 ['1,35', 'giga'],
 ['old', '(11,46', 'users'],
 ['(11,46', 'users'],
 ['contact', '2.926.685', 'accounts'],
 ['2.926.685', 'accounts', 'new,'],
 ['2.926', 'accounts']]

我正在尝试创建单独的列表,每个关键字一个:

keywords=['users', 'giga', 'accounts']

查看数字是否存在差异。 由于列表中可能有多个单词,例如在 ['2.926.685', 'accounts', 'new,'] 中,我只需要考虑列表关键字中包含的单词。

预期的输出是:

对于users

(12,5 , 12,5 , 11,46 , 11,46)(我不需要排除重复项,因为我对它们的频率感兴趣)

对于giga

 (1,35 , 1,35) 

对于accounts

 (2.926.68 , 2.926.68  2.926)

我的困难在于仅从my_list 中提取keywords 中包含的特定单词。完成此操作后,我应该创建与要提取的单词数一样多的空列表。

任何建议将不胜感激。

【问题讨论】:

    标签: python regex pandas


    【解决方案1】:

    您可以遍历my_list 中的每个列表,检查与keywords 中的单词匹配的值(将keywords 转换为集合以提高效率),如果找到,将数值存储到字典(使用defaultdict 方便使用):

    from collections import defaultdict
    import re
    
    my_list=[['12,5', 'users'],
     ['12,5', 'users'],
     ['1,35', 'giga'],
     ['1,35', 'giga'],
     ['old', '11,46', 'users'],
     ['11,46', 'users'],
     ['contact', '2.926.685', 'accounts'],
     ['2.926.685', 'accounts', 'new,'],
     ['2.926', 'accounts']]
    
    keywords=set(['users', 'giga', 'accounts'])
    
    result = defaultdict(list)
    
    for l in my_list:
        k = None
        for v in l:
            if v in keywords:
                k = v
            if re.match(r'[0-9,.]+$', v):
                num = v
        if k is not None:
            result[k].append(num)
    
    print({ k : v for k, v in result.items() })
    

    输出:

    {
     'users': ['12,5', '12,5', '11,46', '11,46'], 
     'giga': ['1,35', '1,35'], 
     'accounts': ['2.926.685', '2.926.685', '2.926']
    }
    

    【讨论】:

    • 谢谢@Nick。请问我如何拆分值和名称,例如对于用户,以便绘制值频率?一般来说,我使用一个变量名并绘制它的值
    • @LucaDiMauro 您可以访问 result['users'] 以获取 users 的值
    • 完美。非常感谢!
    • @LucaDiMauro 不用担心 - 我很高兴能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多