我有一个python dict
a = {
"Ram":(20,"Male"),
"Shyam":(22,"Male"),
"Shruti":(19,"Female"),
}
我想检查一个名字是否存在于dict中作为键,并根据它返回年龄,否则命名。所以我为它编写了以下函数
def func(val ):
if val in a:
return ( a[val][ 0 ], True ) # Return age and key in dict?
return ( val, False )
我可以用更好的方式写这个吗?一个班轮什么的?
由于
答案 0 :(得分:1)
我建议使用词典中的get(key, default)
函数:
def f(val):
result = a.get(val, False)
return (result[0], True) if result else (val, result)
get(key, default)
在dicitonary中,则key
会返回正确的值,如果不是,则返回“默认值”。答案 1 :(得分:0)
我认为当你传递val
时没有任何意义,特别是如果你希望有一个完全不同的对象(年龄),所以我建议其中一个选择:
def func(val):
if val in a:
return a[val][0]
return None
可以简化为(除了返回False
而不是None
:
def func(val):
return val in a and a[val][0]
或者
def func(val):
return a[val][0] # raises KeyError if not found
答案 2 :(得分:0)
一种方法是使您的数据结构更具信息性,在序列上使用get()
方法,并放弃返回元组的想法。关于后者,不清楚为什么需要额外的布尔值。
persons = {
'Ram' : { 'age' : 20, 'sex' : 'Male' },
'Shyam' : { 'age' : 22, 'sex' : 'Male' },
'Shruti' : { 'age' : 19, 'sex' : 'Female' },
}
def get_age(name):
return persons.get(name, {}).get('age')
names = 'Ram Shruti Foo'.split()
print map(get_age, names) # [20, 19, None]