Python 从列表列表中仅提取一个指定单词

Python 从列表列表中仅提取一个指定单词,python,regex,pandas,Python,Regex,Pandas,我有以下清单: 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']] 我正在尝试

我有以下清单:

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.926685,'Caldie','Nex',]中,我只需要考虑列表关键字中包含的单词。p> 预期产出将是:

对于用户:

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

对于giga:

账户:

我的困难在于从我的搜索列表中只提取关键字中包含的特定单词。完成此操作后,我应该创建与要提取的单词数相同的空列表


如有任何建议,将不胜感激

您可以遍历my_列表中的每个列表,检查与关键字中某个单词匹配的值,将关键字转换为一个集合以提高效率,如果找到,则使用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']
}

您可以迭代my_列表中的每个列表,检查与关键字中的单词匹配的值,将关键字转换为一个集合以提高效率,如果找到,则使用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']
}

谢谢你,尼克。我可以问您如何分割值和名称(例如用户)以绘制值频率吗?通常,我使用变量名并绘制其values@LucaDiMauro您可以访问结果['users'],只获取usersPerfect的值。非常感谢@不用担心,我很高兴能帮上忙。谢谢你@Nick。我可以问您如何分割值和名称(例如用户)以绘制值频率吗?通常,我使用变量名并绘制其values@LucaDiMauro您可以访问结果['users'],只获取usersPerfect的值。非常感谢@卢卡迪毛罗不用担心,我很高兴能帮上忙。