1

次のような辞書があります。

{'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 の部分にアクセスするにはどうすればよいですか? 私の辞書の値が次の場合: |T-shirt| |200| |0| |0|、取得したいのは: 200、同じ値の他の部分のいずれかです。私の dict 値はすべてクラスウェアのオブジェクトです。つまり、「||」で囲まれた各部分は 属性です。

たとえば:

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

T シャツが self.name 属性、200 が self.price 属性、0 (1 つ目) が self.quantity、0 (2 つ目) が self.bought 属性であるとします。

self.price 属性にのみアクセスしたいのですが、どうすればよいですか? 次のようにオブジェクトにインデックスを付けてみました:

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

しかし、pythonは次のように言っています:

"object can not be indexed"

誰でもヒントを得ましたか?

4

2 に答える 2

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別の方法として、return をディクショナリにすることで、物事をより簡単に読みやすくすることができます。

>>> 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'
于 2013-04-19T08:21:03.957 に答える
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'
>>> 
于 2013-04-19T08:33:27.953 に答える