在python中形成标签列表的问题

时间:2016-04-01 20:11:28

标签: python json list dictionary

我正在通过python执行subprocess脚本并向其传递一个命名参数。在subprocess脚本中,我必须形成list of tagslist of key and value pair),其格式如下所示:

Tags=[
        {
            'Key': 'string',
            'Value': 'string'
        },
    ]

这是我的父脚本

def call_script(tags):

    result = subprocess.Popen(["python","second_script.py","--tags",tags])
    result.wait()

if __name__ == '__main__':

tags = '{'
   tags = tags + '"Name":"' + username + '"'
   tags = tags + ', "Designation":"' + Designation + '"'
   tags = tags + ', "Type":"' + type + '"'
   tags = tags + '}'
   tags = str(tags)

   call_script(tags)

这是我的 second_script.py

if __name__ == '__main__':

    # Initialize tags
    tags = {}
    lst = []

    # Basic command line argument parsing to launch using boto
    parser = argparse.ArgumentParser()

    parser.add_argument('--tags', type=json.loads)

    args = parser.parse_args()


    print args.tags

    # Build a list of tags
    for k, v in args.tags.iteritems():
        print k
        print v
        tags['Key'] = k
        tags['Value'] = v
        print tags
        lst.append(tags)

    # print 'Tags: ',tags
    print "List of Tags: ",lst

当我运行此功能时,我只会在tagslst中看到最后一个键值对。如何按照上面所需的格式显示键值对列表?

示例输入可以是:

Name: Jason
Designation: Analyst
Type: Permanent

因此,所需的输出格式应为:

Tags = [
{
                'Key': 'Name',
                'Value': 'Jason'
            },
{
                'Key': 'Designation',
                'Value': 'Analyst'
            },
{
                'Key': 'Type',
                'Value': 'Permanent'
            },
]

我在上面的代码中得到的tags输出为 - {'Value': u'Permanent', 'Key': u'Type'}lst为:[{'Value': u'Permanent', 'Key': u'Type'}, {'Value': u'Permanent', 'Key': u'Type'}, {'Value': u'Permanent', 'Key': u'Type'}]

我的代码中出现了什么错误,如何更正呢?

2 个答案:

答案 0 :(得分:0)

尝试在for循环中重置tags

for k, v in args.tags.iteritems():
    tags={} #changed Line
    print k
    print v
    tags['Key'] = k
    tags['Value'] = v
    print tags
    lst.append(tags)

答案 1 :(得分:0)

这是因为dict是可变的,并且您将同一对象的引用附加到lst。取代

tags['Key'] = k
tags['Value'] = v
print tags
lst.append(tags)

print tags
lst.append({'Key' : k, 'Value' : v})