gpt4 book ai didi

python - 从字典中的自定义函数访问值

转载 作者:太空宇宙 更新时间:2023-11-04 11:21:51 24 4
gpt4 key购买 nike

我有以下针对特定用例的代码行。 (使用python 2.7)

class AutoMap(dict):
"""Implementation of autovivification feature."""
def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
value = self[item] = type(self)()
return value
def __dir__(self):
return dict.keys()
__getattr__ = dict.get
__setattr__ = dict.__setitem__
__delattr__ = dict.__delitem__

obj = AutoMap()
AddressMap = AutoMap()

obj["state"] = "Maharastra"
obj["country"] = "India"

AddressMap['address1'] = obj

obj["state"] = "California"
obj["country"] = "USA"

AddressMap['address2'] = obj

print AddressMap # {'address1': {'state' : 'Maharastra', 'country' : 'India'}, 'address2': {'state' : 'California', 'country' : 'USA'}}

def prn_state():
print "State: " + state


AddressMap['address1']['_prn_state'] = prn_state

AddressMap['address2']['_prn_state'] = prn_state


print AddressMap # {'address1': {'state' : 'Maharastra', 'country' : 'India', '_prn_state': <function prn_state at 0x7fb297dc7320>}, 'address2': {'state' : 'California', 'country' : 'USA', '_prn_state': <function prn_state at 0x7fb297dc7320>}}

print type(AddressMap) # <class 'AutoMap'>

print AddressMap.address2._prn_state()

现在,我希望每当我编写这行代码时它都应该打印“California”。但是,它会抛出一条错误消息“NameError:全局名称‘state’未定义”

最佳答案

AddressMap是一个dict,获取address2state值:

AddressMap = {'address1': {'state' : 'Maharastra', 'country' : 'India'}, 
'address2': {'state' : 'California', 'country' : 'USA'}}
print(AddressMap['address2']['state'])

编辑:

包装在函数中:

def states(AddressMap, address):
return AddressMap[address].get('state', 'Not found')

AddressMap = {'address1': {'state' : 'Maharastra', 'country' : 'India'}, 'address2': {'state' : 'California', 'country' : 'USA'}}
print(states(AddressMap, 'address2'))

输出:

California

关于python - 从字典中的自定义函数访问值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55810442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com