13

我正在尝试编写一个函数来将 python 列表转换为 {"mpn":"list_value"} 对象的 JSON 数组,其中 "mpn" 是我需要的每个对象的文字字符串值,但 "list_value" 是值从 python 列表中。我会将此函数的输出用于 API 获取请求。

part_nums = ['ECA-1EHG102','CL05B103KB5NNNC','CC0402KRX5R8BB104']

def json_list(list):
    lst = []
    d = {}
    for pn in list:
        d['mpn']=pn
        lst.append(d)
    return json.dumps(lst, separators=(',',':'))

print json_list(part_nums)

此当前函数不起作用,并返回所有 JSON 对象的 python 列表中的最后一个值:

>[{"mpn":"CC0402KRX5R8BB104"},{"mpn":"CC0402KRX5R8BB104"},{"mpn":"CC0402KRX5R8BB104"}]

但是,当然我需要我的函数来返回对象中的唯一列表值,如下所示:

>[{"mpn":"ECA-1EHG102"},{"mpn":"CL05B103KB5NNNC"},{"mpn":"CC0402KRX5R8BB104"}]

底线是我不明白为什么这个功能不起作用。我希望我可以将带有单个 {key:value} 对的字典附加到 python 列表中,并且所有字典都具有相同的键并不重要,因为它们是独立的。谢谢你的帮助。

4

3 回答 3

31

您正在将完全相同的字典添加到列表中。您应该为列表中的每个项目创建一个新字典:

json.dumps([dict(mpn=pn) for pn in lst])
于 2012-07-03T14:12:45.080 回答
11

正如其他人(在答案中)所解释的那样,您应该为列表中的每个项目创建一个新词典,您总是引用同一个词典

import json
part_nums = ['ECA-1EHG102','CL05B103KB5NNNC','CC0402KRX5R8BB104']

def json_list(list):
    lst = []
    for pn in list:
        d = {}
        d['mpn']=pn
        lst.append(d)
    return json.dumps(lst)

print json_list(part_nums)

打印

[{"mpn": "ECA-1EHG102"}, {"mpn": "CL05B103KB5NNNC"}, {"mpn": "CC0402KRX5R8BB104"}]
于 2012-07-03T14:24:32.783 回答
0
import json
part_nums = ['ECA-1EHG102','CL05B103KB5NNNC','CC0402KRX5R8BB104']

def json_list(list):
    lst = []
    for pn in list:
        d = {}
        d['mpn']=pn
        lst.append(d)
    return json.dumps(lst)

print json_list(part_nums)   # for pyhon2
print (json_list(part_nums)) # for python3
于 2020-02-26T08:45:35.687 回答