通过dict.key访问dict


我创建了一个dictsource = {'livemode': False}。我认为可以通过source.livemode访问livemode值。但它不起作用。有没有办法通过这种方式访问它?

由于非source['livemode']有效,但我需要source.livemode,因为它已经在我的代码中使用过了,我必须将其作为Stripe返回值charge的替代方案来处理。

我想给出更多的上下文

在这里,我通过Stripe:创建收费

def _create_charge(self, request, order_reference, order_items_dict, token):
try:
charge = stripe.Charge.create(
amount=order_items_dict['total_gross'],
application_fee=order_items_dict['application_fee'],
currency=order_items_dict['event'].currency,
source=token,
stripe_account=order_items_dict['event'].organizer.stripe_account,
expand=['balance_transaction', 'application_fee'],
)
except stripe.error.StripeError as e:
body = e.json_body
err = body.get('error', {})
messages.error(
request,
err.get('message')
)
else:
if charge.paid and charge.status == 'succeeded':
return charge

我可以使用例如charge_or_source.livemode访问

def _create_order(self, request, charge_or_source, order_status):
order_reference = request.session.get('order_reference')
new_order = self.order_form.save(commit=False)
print(charge_or_source.livemode, "charge_or_source.livemode")
new_order_dict = {
'total_gross': self.order_items_dict['total_gross'],
'livemode': charge_or_source.livemode,
}

现在有一种情况(当订单为Free时(,我必须"跳过"_create_charge函数,但仍然必须发送有关charge_or_source.livemode的信息。因此,我试图创建上述词典。

我自己也是个初学者,但让我试着回答:

假设你有一本字典:

dictionary = {"One": 1, "Two": 2, "Three": 3}

你可以创建一个类,它的关键字如下:

class DictKeys:
One = 'One'
Two = 'Two'
Three = 'Three'

这里,一、二和三是类变量或属性,这意味着如果你为这个类创建一个对象:

key = DictKeys()

您可以使用"访问所有这些密钥(点(运算符。

key.One
>>'One'

现在只要把它插在你想访问字典的地方就可以了!

dictionary[key.One]
>>1

我相信这不是最好的方法,类访问比dict访问慢一点,但如果你真的想,你可以使用这种方法访问所有带点的键。

您可以实现自定义dict包装器(dict的子类或包含dict的东西(,并实现__getattr__(或__getattribute__(以从dict返回数据。

class DictObject(object):
def __init__(self, data):
self.mydict = data
def __getattr__(self, attr):
if attr in self.mydict: return self.mydict[attr]
return super(self, DictObject).__getattr__(attr)

访问字典的正确方法是如何提出它:

source['livemode'] 

最新更新