我有一个类似的字典:
{'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|}
这意味着我有一个看起来像153的键,它访问值:
|T-shirt| |200| |0| |0|
如果我想做的是访问我的值中的1个部分。例如,如果我输入153并获得| T恤| | 200 | | 0 | | 0 |,如何在我的值中访问200部件?如果我的dict值是:| T恤| | 200 | | 0 | | 0 |,我只想获得:200,机器人任何其他具有相同价值的部分。我的所有dict值都是类商品的对象,这意味着每个被“||”包围的部分是一个属性。
例如:
|T-shirt| |200| |0| |0|.
T恤是self.name属性,200是self.price属性,0(第一个)是self.quantity,0(第二个)是self.bought属性。
我只想访问self.price属性,我该怎么办?我尝试索引我的对象,如:
x = wares[T-shirt, 200, 0, 0]
b = x[1]
print(b)
但是python说:
"object can not be indexed"
任何人都有提示?
答案 0 :(得分:3)
>>> 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)
或者由于正则表达是邪恶的,我建议:
>>> def parts(s):
return [x.strip('|') for x in s.split()]
>>> parts(d['153'])
['T-shirt', '200', '0', '0']
>>> parts(d['153'])[1]
'200'
或者,通过使parts
返回字典,您可以使事情变得更容易和更易读:
>>> def parts(s):
return dict(zip(('name', 'price', 'quantity', 'bought'), [x.strip('|') for x in s.split()]))
>>> parts(d['153'])['price']
'200'
实际上,我们可以使用collections.namedtuple
>>> 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'
答案 1 :(得分:0)
>>> print dict
{'153': ['T-shirt', '200', '0', '0'], '334': ['Hatt', '59', '0', '0'], '764': ['Jeans', '350', '0', '0'], '543': ['Jacka', '400', '0', '0'], '324': ['Skor', '250', '0', '0'], '234': ['Tr\xc3\xb6ja ', '300', '0', '0']}
>>> dict['153'][1]
'200'
>>>