如何在python中从元组中提取单词

如何在python中从元组中提取单词,python,regex,tuples,Python,Regex,Tuples,如何从上述每个元组中提取前3个单词(基于边上的数字) 输出应为: (0, u'0.559*"delivery" + 0.124*"area" + 0.018*"mile" + 0.016*"option" + 0.012*"partner" + 0.011*"traffic" + 0.011*"hub" + 0.011*"thanks" + 0.010*"city" + 0.009*"way"') (1, u'0.397*"package" + 0.073*"address" + 0.055*"

如何从上述每个元组中提取前3个单词(基于边上的数字)

输出应为:

(0, u'0.559*"delivery" + 0.124*"area" + 0.018*"mile" + 0.016*"option" + 0.012*"partner" + 0.011*"traffic" + 0.011*"hub" + 0.011*"thanks" + 0.010*"city" + 0.009*"way"')
(1, u'0.397*"package" + 0.073*"address" + 0.055*"time" + 0.047*"customer" + 0.045*"apartment" + 0.037*"delivery" + 0.031*"number" + 0.026*"item" + 0.021*"support" + 0.018*"door"')
(2, u'0.190*"time" + 0.127*"order" + 0.113*"minute" + 0.075*"pickup" + 0.074*"restaurant" + 0.031*"food" + 0.027*"support" + 0.027*"delivery" + 0.026*"pick" + 0.018*"min"')
(3, u'0.072*"code" + 0.067*"gps" + 0.053*"map" + 0.050*"street" + 0.047*"building" + 0.043*"address" + 0.042*"navigation" + 0.039*"access" + 0.035*"point" + 0.028*"gate"')

使用
re.findall()
str.join()
函数的解决方案:

(0,delivery area mile)
(1,package address time)
(2,time order minute)
(3, code gps map)
输出:

import re

l = [
(0, u'0.559*"delivery" + 0.124*"area" + 0.018*"mile" + 0.016*"option" + 0.012*"partner" + 0.011*"traffic" + 0.011*"hub" + 0.011*"thanks" + 0.010*"city" + 0.009*"way"'),
(1, u'0.397*"package" + 0.073*"address" + 0.055*"time" + 0.047*"customer" + 0.045*"apartment" + 0.037*"delivery" + 0.031*"number" + 0.026*"item" + 0.021*"support" + 0.018*"door"'),
(2, u'0.190*"time" + 0.127*"order" + 0.113*"minute" + 0.075*"pickup" + 0.074*"restaurant" + 0.031*"food" + 0.027*"support" + 0.027*"delivery" + 0.026*"pick" + 0.018*"min"'),
(3, u'0.072*"code" + 0.067*"gps" + 0.053*"map" + 0.050*"street" + 0.047*"building" + 0.043*"address" + 0.042*"navigation" + 0.039*"access" + 0.035*"point" + 0.028*"gate"')
]

result = [tuple([t[0], ' '.join(re.findall(r'"([a-z]+)"', t[1])[0:3])]) for t in l]
print(result)
我想:

  • 根据
    “+”
    (如果空格数不同,可能需要正则表达式),然后根据
    “*”
  • 根据系数的浮点值对这些元组进行排序,保留最大值3
  • 删除系数并连接字符串(在过程中去掉引号)
在(复合)单衬里中:

[(0, 'delivery area mile'), (1, 'package address time'), (2, 'time order minute'), (3, 'code gps map')]
结果:

l = [(0, u'0.124*"area" + 0.018*"mile" + 0.016*"option" + 0.012*"partner" + 0.011*"traffic" + 0.011*"hub" + 0.011*"thanks" + 0.559*"delivery" + 0.010*"city" + 0.009*"way"'),
(1, u'0.073*"address" + 0.055*"time" + 0.397*"package" + 0.047*"customer" + 0.045*"apartment" + 0.037*"delivery" + 0.031*"number" + 0.026*"item" + 0.021*"support" + 0.018*"door"'),
(2, u'0.190*"time" + 0.127*"order" + 0.113*"minute" + 0.075*"pickup" + 0.074*"restaurant" + 0.031*"food" + 0.027*"support" + 0.027*"delivery" + 0.026*"pick" + 0.018*"min"'),
(3, u'0.047*"building" + 0.072*"code" + 0.067*"gps" + 0.053*"map" + 0.050*"street" + 0.043*"address" + 0.042*"navigation" + 0.039*"access" + 0.035*"point" + 0.028*"gate"')]

result = [" ".join(x[1].strip('"') for x in sorted((e.split("*") for e in sl[1].split(" + ")),key=lambda x:float(x[0]),reverse=True)[:3]) for sl in l]

print(result)

(请注意,我已经调整了项目的顺序以测试coeff排序)

显示所需结果请提问以显示所需结果。这似乎是一个很好的潜在问题,但并非如此。答案可以回答也可以不回答您的问题…更新了我的问题以反映output@Arman,这3个单词应该是单个字符串还是列表?@Arman,如果它们在元组中以随机顺序排列会更好,因为现在,它们已经以最高的3个数字开始,假设系数是降序的。否则就不行了work@Jean-Françoisfare,我在开始时也考虑过分类项目,但似乎“first”3是有意的
['delivery area mile', 'package address time', 'time order minute', 'code gps map']