美文网首页
推导式处理dict

推导式处理dict

作者: 俊杰的笔记 | 来源:发表于2017-05-04 14:35 被阅读6次
# encoding:utf-8

# 定义一个类Field,含一个实例属性field_name


class Field(object):
    def __init__(self, field_name):
        self.__field_name = field_name  # 双下划线开头的实例属性表示私有
        self.column_type = 'varchar(100)'

    @property  # property注解表示可以用xxx.field_name访问方法,而不是xxx.field_name()
    def field_name(self):
        '提供公有方法访问私有__field_name'
        return self.__field_name


# 现有一个dict,包含一些数据
__data = {
    'a': 'xxx',
    'b': 'yyy',
    'id': Field('user_id'),
    'name': Field('user_name'),
    'email': Field('email')
}


# 需求: 将__data的items中,value的类型为Field的,转换为field_name,返回新的dict
# 最后结果应该是{'id': 'user_id', 'name':'user_name', 'email': 'email'}

# 解法一: 普通写法,最常见的写法
def __answer1(data):
    result = {}
    for k, v in data.items():
        if isinstance(v, Field):
            result[k] = v.field_name
    return result


# 解法二: 使用Java 8的流式处理思想,filter和map组合
# 在java中一次循环中可以先filter再map,但在python中filter和map是两个函数
# 需要遍历两遍
def __answer2(data):
    # 过滤 注意返回值实际是个filter类型的对象,是可迭代的,不需要再list(filtered)一次
    filtered = filter(lambda t: isinstance(t[1], Field), data.items())
    # 转换 注意返回值是个map类型的对象,还需要转换为dict,直接dict(map_obj)转换,不需要先转换为list
    map_obj = map(lambda t: (t[0], t[1].field_name), filtered)
    result = dict(map_obj)
    return result


# 解法三: 使用python强大的推导式,这种解法真正体现python的数据处理思想精髓
# 没有用map, 也没有filter, 也不用lambda
# java的流式处理思想实际不太适合python
def __answer3(data):
    return {k: v.field_name for k, v in data.items() if isinstance(v, Field)}


# 测试
if __name__ == '__main__':
    from time import clock
    start = clock()
    print(__answer1(__data))
    finish1 = clock()
    print(__answer2(__data))
    finish2 = clock()
    print(__answer3(__data))
    finish3 = clock()

    using1 = finish1 - start
    using2 = finish2 - finish1
    using3 = finish3 - finish2
    print(using3 < using2 < using1)

相关文章

  • 推导式处理dict

  • Python中各种推导式

    Python的各种推导式(列表推导式,字典推导式,集合推导式) 列表(list)推导式 字典(dict)推导式 集...

  • PYTHON中的列表推导式,字典推导式,集合推导式

    推导式分为列表推导式(list),字典推导式(dict),集合推导式(set)三种 1.列表推导式也叫列表解析式。...

  • python的列表推导式

    推导式分为列表推导式(list),字典推导式(dict),集合推导式(set)三种 1.列表推导式也叫列表解析式。...

  • python 推导式

    一、什么是推导式 对于list列表,set集合,dict字典,在原有数据上根据条件生成新的数据就是推导式。 它可以...

  • 高颜值的Python

    本文旨在收集记录分享简洁漂亮的Python写法,欢迎补充 字典/集合推导式(dict/set comprehens...

  • python推导式

    python的各种推导式(列表推导式、字典推导式、集合推导式) 推导式comprehensions(又称解析式),...

  • 024python的各种推导式

    python的各种推导式(列表推导式、字典推导式、集合推导式) 推导式comprehensions(又称解析式),...

  • 016 Python语法之推导式

    推导式 特性 好好应用推导式后面的条件判断 列表推导式 字典推导式 集合推导式 生成器推导式

  • 推导式 生成器 迭代器

    推导式 生成器 迭代器 1.推导式 推导式:列表推导式、字典推导式、集合推导式语法 [变量 for 变量 in 旧...

网友评论

      本文标题:推导式处理dict

      本文链接:https://www.haomeiwen.com/subject/buartxtx.html