这是一个奇怪的问题,但我想知道是否有可能构建一个dict值,其中包含python中键值对中的键。如下所示,我想通过替换重复的客户,产品,动物来重写以下类 SwitchTest 来自key-value对的实例。我怎样才能做到这一点?或者更具体地说,我如何在字典中获得键值的关键值?
class Product():
def __init__(self, para):
self.para = para
.....
class Animal():
def __init__(self, para):
self.para = para
....
class Human():
def __init__(self, para):
self.para = para
....
class SwitchTest():
def __init__(self):
instance = {'customer': lambda x: setattr(SwitchTest, 'customer', Human(x)),
'product': lambda x: setattr(self, 'product', Product(x)),
'animal': lambda x: setattr(self, 'animal', Animal(x))}
答案 0 :(得分:0)
数字背后有什么意义吗?
SELECT GREATEST(NULL,NOW());
输出:
initial_dict = {'a': 987, 'b': 18, 'c': 9, 'd': 87}
users = {k: ('user_{}'.format(k),'address_{}'.format(k), v) for k, v in initial_dict.items()}
答案 1 :(得分:0)
我不太明白你为什么要将密钥存储在值中。这违背了字典的概念。
如果您只是在返回时将值添加到值,那么您将拥有一些自定义词典:
users = c_dict(
a = ('user', 'address', 987),
# ...
)
获取值后会为返回添加关键:
In [32]: users['a']
Out[32]: ('user_a', 'address_a', 987)
要实现此目的,您可以继承dict
并仅覆盖__getitem__
方法:
class c_dict(dict):
def __getitem__(self, key):
val = super(c_dict, self).__getitem__(key)
if isinstance(val, tuple):
return tuple(
'{0}_{1}'.format(el, key)
if isinstance(el, str)
else el
for el in val
)
else:
return val
此自定义词典c_dict
将表现得像普通词典,除非您获得类型tuple
的值,该值包含类型str
的元素,其中追加键被添加到元素,但只有在返回它们时。
使用这种方法,您不会将键存储在值内,它会保持概念分离不变。
您可以在普通dict
和此自定义c_dict
之间轻松切换。因此,如果您想要摆脱这种返回值的特殊方式,只需执行users = dict(users)
和users
再简单dict
即可。这种方式有效:
In [41]: users = {'a': ('user', 'address', 12)}
In [42]: users['a']
Out[42]: ('user', 'address', 12)
In [43]: users = c_dict(users)
In [44]: users['a']
Out[44]: ('user_a', 'address_a', 12)
In [45]: users = dict(users)
In [46]: users['a']
Out[46]: ('user', 'address', 12)
希望有所帮助。快乐的编码!