我试图理解如何使用其值将特定类型的字符串提取到字典中。
前:
项目衬衫11-14方差11-12-13-14-15颜色红色
其中
ShirtType: 11, 14
variance: 11,12,13,14,15
color: Red
喜欢使用regexp的想法,看看如何在Python中实现这一点?欢迎所有的想法。
答案 0 :(得分:1)
您可以使用以下regex
表达式从字符串中提取所需的值。这是获得所需dict
的单线程:
>>> import re
>>> my_str = "item SHIRT 11-14 variance 11-12-13-14-15 color Red"
>>> keys = ["shirt", "variance", "color"]
>>> {k: v.split('-') if '-' in v else v for k, v in zip(keys, re.findall(
'(?<=SHIRT\s)[\d-]+|(?<=variance\s)[\d-]+|(?<=color\s)\w+',my_str))}
将dict
对象返回为:
{'color': 'Red', 'variance': ['11', '12', '13', '14', '15'], 'shirt': ['11', '14']}
每个正则表达式模式的解释:
# For shirt:
# This regex matches the number and hyphen "-"
# preceded by "variance" and space " "
>>> re.search('(?<=SHIRT\s)[\d-]+', my_str).group()
'11-14'
# For variance:
# Same as the above regex, it matches the number and hyphen "-"
# preceded by "SHIRT" and space " "
>>> re.search('(?<=variance\s)[\d-]+', my_str).group()
'11-12-13-14-15'
# For color:
# This regex matches the alphabets followed by "color" and space " "
>>> re.search('(?<=color\s)\w+', my_str).group()
'Red'
使用此功能,您也可以明确地将每个密钥分别分配给dict
。
答案 1 :(得分:1)
你可以试试这个:
import re
s = "item SHIRT 11-14 variance 11-12-13-14-15 color Red"
new_s = s.split()[1:]
final_data = {"ShirtType" if a == "SHIRT" else a:map(int, b.split('-')) if re.findall('\d\-', b) else b for a, b in [(new_s[i], new_s[i+1]) for i in range(0, len(new_s)-1, 2)]}
输出:
{'color': 'Red', 'ShirtType': [11, 14], 'variance': [11, 12, 13, 14, 15]}
答案 2 :(得分:1)
如果您的输入始终如此,则可以使用regex
提取值并将其插入字典中:
import re
dic = {}
input = 'item SHIRT 11-14 variance 11-12-13-14-15 color Red'
dic['Shirt Type'] = re.search('(?<=SHIRT\s)[\d-]+', input).group().split('-')
dic['Variance'] = re.search('(?<=variance\s)[\d-]+', input).group().split('-')
dic['Color']= re.search('(?<=color\s)\w+', input).group().split('-')
print(dic)
结果将是一个包含3 keys
的字典,每个value
将是一个数组(数组的大小取决于输入和 - 中的数字)例如,这是您输入的结果:
{'Shirt Type': ['11', '14'], 'Variance': ['11', '12', '13', '14', '15'], 'Color': ['Red']}
答案 3 :(得分:0)
您也可以在不使用正则表达式的情况下尝试:
一线解决方案:
print({line.split()[1:][i:i+2][0]:line.split()[1:][i:i+2][1] for line in open('file.txt','r') for i in range(0,len(line.split()[1:]),2)})
输出:
{'color': 'Red', 'variance': '11-12-13-14-15', 'SHIRT': '11-14'}
详细版本:
with open('file.txt','r') as f:
for line in f:
chunk=line.split()[1:]
print({chunk[i:i+2][0]:chunk[i:i+2][1] for i in range(0,len(chunk),2)})