<pre><code>>>> import re
>>> d= {'153': '|T-shirt| |200| |0| |0|', '764': '|Jeans| |350| |0| |0|', '334': '|Hatt| |59| |0| |0|', '324': '|Skor| |250| |0| |0|', '234': '|Tröja| |300| |0| |0|', '543': '|Jacka| |400| |0| |0|'}
>>> def parts(s):
return re.findall(r'\|([^\|]+)\|', s)
</code></pre>
<p>或者既然regex是邪恶的,我建议:</p>
<pre><code>>>> def parts(s):
return [x.strip('|') for x in s.split()]
>>> parts(d['153'])
['T-shirt', '200', '0', '0']
>>> parts(d['153'])[1]
'200'
</code></pre>
<p>或者,通过使<code>parts</code>返回一个字典,您可以使事情变得更简单、更可读:</p>
<pre><code>>>> def parts(s):
return dict(zip(('name', 'price', 'quantity', 'bought'), [x.strip('|') for x in s.split()]))
>>> parts(d['153'])['price']
'200'
</code></pre>
<p>实际上,我们可以使用<code>collections.namedtuple</code>使这变得更好</p>
<pre><code>>>> from collections import namedtuple
>>> def parts(s):
Item = namedtuple('Item', ('name', 'price', 'quantity', 'bought'))
return Item(*[x.strip('|') for x in s.split()])
>>> parts(d['153'])
Item(name='T-shirt', price='200', quantity='0', bought='0')
>>> parts(d['153']).price
'200'
</code></pre>