访问值列表中的特定值

2024-09-28 22:37:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典看起来像:

{'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|

如果我想做的是访问我的价值中的一部分。例如,如果我键入153并得到| T恤| 200 | | 0 | | 0 |,那么如何访问我的值中的第200部分?如果我的dict值是:| T恤| | 200 | | | 0 | | 0 |,我只想得到:200,bot相同值的任何其他部分。我所有的dict值都是类wares的对象,这意味着用“| |”括起来的每个部分都是一个属性。你知道吗

例如:

|T-shirt| |200| |0| |0|. 

我们的T恤是姓名属性,200是自行定价属性,0(第一个)是自身数量0(第二个)是自己买的属性。你知道吗

我只想进入自行定价属性,我该怎么做?我试着索引我的对象,比如:

x = wares[T-shirt, 200, 0, 0]
b = x[1]
print(b)

但是python说:

"object can not be indexed"

有人得到小费吗?你知道吗


Tags: 对象键入字典属性trdict定价价值
2条回答
>>> 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'
>>> 
>>> 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)

或者既然regex是邪恶的,我建议:

>>> 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'

相关问题 更多 >