• python list append方法


    keyValueResult = {'a': 1, 'b': 2}
    sendData = []
    
    
    def set_push_format(ip):
        data_format = {
            "endpoint": "test-endpoint",
            "metric": "test-metric",
            "timestamp": 54,
            "step": 60,
            "value": 1,
            "counterType": "GAUGE",
            "tags": "",
        }
        # print keyValueResult
        for key_value in keyValueResult:
            data_format = data_format.copy()  
            # print key_value
            data_format['endpoint'] = ip
            data_format['metric'] = key_value
            data_format['value'] = keyValueResult.get(key_value)
            print 'data_format:' + key_value
            print data_format
            # 字典赋值给列表,构建JSON文件格式
            sendData.append(data_format)
            print 'sendData:' + key_value
            print sendData
    
    
    if __name__ == "__main__":
        set_push_format('192.168.137.10')
        print 'final'
        print sendData
    

      该句必须加上,不然append的全是同一个字典!

    别人遇到的类似问题

    问题:将数据库中查出的数据(列表中包含元组)转换为列表中字典。

    原数据结构,从数据库查出:

    cur = [("t1", "d1"), ("t2", "d2")]

    转换后数据结构:

    [{'description': 'd1', 'title': 't1'}, {'description': 'd2', 'title': 't2'}]

    方法一,使用append, 出现错误结果

    cur = [("t1", "d1"), ("t2", "d2")] 
    post_dict = {}
    posts = []
    for row in cur:
        post_dict['title'] = row[0]
        post_dict['description'] = row[1]
        print "post_dict:",post_dict
        posts.append(post_dict)
        print "posts:",posts
    

    方法一运行结果:

    post_dict: {'description': 'd1', 'title': 't1'}
    posts: [{'description': 'd1', 'title': 't1'}]
    post_dict: {'description': 'd2', 'title': 't2'}
    posts: [{'description': 'd2', 'title': 't2'}, {'description': 'd2', 'title': 't2'}]
    

    方法二,使用列表解析,结果正常

    cur = [("a", "a1"), ("b", "b1")] 
    posts = []
    posts = [dict(title=row[0], description=row[1]) for row in cur]
    print "posts:",posts
    

    方法二运行结果,正常

    posts: [{'description': 'd1', 'title': 't1'}, {'description': 'd2', 'title': 't2'}]
    采纳

    方法一中,你的post_dict是一个字典对象,for循环的操作都是在更新这个对象的keyvalue,自始至终就这一个对象,append多少次都一样。

    把字典对象放在循环内创建即可:

    cur = [("t1", "d1"), ("t2", "d2")] 
    posts = []
    for row in cur:
        post_dict = {}
        post_dict['title'] = row[0]
        post_dict['description'] = row[1]
        print "post_dict:",post_dict
        posts.append(post_dict)
        print "posts:",posts
    

    优先考虑列表解析,另,本例的tupel列表可以用循环解包,大致如下:

    In [1]: cur = [("t1", "d1"), ("t2", "d2")]
    
    In [2]: r = [{'description': description, 'title': title} for description, title in cur]
    
    In [3]: r
    Out[3]: [{'description': 't1', 'title': 'd1'}, {'description': 't2', 'title': 'd2'}

    方法一的循环中,post_dict始终指向的是同一个对象。 在for循环中,使用匿名对象就可以了:

     
    for row in cur:
        posts.append({'title':row[0],'description':row[1]})
  • 相关阅读:
    Python学习笔记21:数据库操作(sqlite3)
    JAVA的extends使用方法
    thinkphp5的Illegal string offset 'id'错误
    thinkphp5项目--个人博客(五)
    语法错误: unexpected ''); ?></span></span></h2> ' (T_CONSTANT_ENCAPSED_STRING), expecting ',' or ';'
    thinkphp5.0的验证码安装和相关错误
    thinkphp5项目--个人博客(四)
    thinkphp5项目--个人博客(三)
    NAS是什么
    百度编辑器简介及如何使用
  • 原文地址:https://www.cnblogs.com/felixzh/p/5885284.html
Copyright © 2020-2023  润新知