Pythonic方式为以下代码

时间:2014-02-04 02:08:17

标签: python

我有一个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 )

我可以用更好的方式写这个吗?一个班轮什么的?

由于

3 个答案:

答案 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]