从包含JSON的列表中获取键和值

3

我在Python中获取列表中的键和值时遇到了问题。该列表本身包含多个结构如下的JSON行:

[{"values":"test","cost":"1234"},{"values":"test2","cost":"12345"}]

问题是我不想把它转换成字典,因为这将意味着在读取原始JSON文件时填充一个字典并将每个JSON片段附加到列表,然后将列表附加到字典中。
我发现只需这样就可以打印键:
        for line in file:
            mylist.append(json.loads(line))
            for line in mylist:
                for key in line.keys():
                    print(key)

这一切看起来都很好,它打印出了所有的键,如示例中的"values","test"等。但是我不能像访问字典那样通过这种方式访问每个键对应的值:

        for line in file:
            mylist.append(json.loads(line))
            for line in mylist:
                for key,value in line.keys():
                    print(value)

由于这会抛出一个错误,即“拆包的值过多”,是否有一种更简单的解决方案我没有考虑到?我已经查看了许多其他解决方案,但所有解决方案似乎都会更新字典并通过字典访问键值,但我宁愿不必将列表附加到字典中,然后更新字典。


1
这里应该使用 for key,value in line.items(): 而不是 keys!! - Jean-François Fabre
1
[{"values":"test","cost":"1234"},{"values":"test2","cost":"12345"}] 是有效的JSON格式。使用 json.load() 从文件中可以直接得到一个列表对象,其中包含所有单独的字典作为该列表中的项,你可以直接遍历该列表。 - roganjosh
好的,这两条评论都非常有帮助,非常感谢你们。 - D3181
1
@Dean219 loads(带有末尾的s)是用于字符串的。与逐行读取文件并转换行不同,只需使用load()一次性加载整个文件即可。 - roganjosh
非常有帮助的建议 @roganjosh,这将帮助我减少代码量。谢谢! - D3181
1个回答

4
要访问字典中的键和值,请使用.items()方法。
for key, value in line.items()

还要注意,在第一种情况中使用 .keys() 是不必要的,因为遍历字典通常会返回其键。

for key in line:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接