读取JSON文件时,如何防止输出值交错?

时间:2019-04-12 13:05:26

标签: python json

从Python脚本读取JSON文件时遇到问题。 这是JSON文件:

{
    "a": 1,
    "b": 2,
    "c": 3, 
    "d": 4, 
    "e": 5, 
    "f": 6, 
    "g": 7, 
    "h": 8, 
    "i": 9
}

这是我从当前路径打开JSON文件并读取与其中的字母相关联的每个值的Python文件:

with open(os.getcwd() + '/letters.json') as lettersListJSON:
    lettersList = json.load(lettersListJSON)
    for char in lettersList
        print lettersList[char]

我很奇怪地得到以下输出:

1
3
2
5
4
7
6
9
8

为什么这些值交错,如何防止这种情况发生? 我应该用互斥锁锁定变量的访问吗?

2 个答案:

答案 0 :(得分:4)

<video id="stream_video_tag" width="800" height="600" controls> <source src="index.m3u8" type="application/x-mpegURL"> <track src="sub_en.vtt" srclang="en" label="English" kind="subtitles" type="application/octet-stream"> <track src="sub_ru.vtt" srclang="ru" label="Russian" kind="subtitles" type="application/octet-stream"> </video> 实际上是letterList,因此没有排序。

如果确实希望将JSON放入顺序中,则可以将其加载到letterDict中:

OrderedDict

(显然,我省略了打开文件之类的东西)

答案 1 :(得分:1)

由于任何“线程”问题,您的输出没有交错。 python 3.6之前的字典没有进行排序,CPython引入了基于3.5的实现细节的插入顺序排序,并且从python 3.7开始默认地保证了插入顺序。

更多信息:

您不知道json.load如何创建字典-如果要对输出进行排序-对其进行排序:

t = """{
    "a": 1,
    "b": 2,
    "c": 3, 
    "d": 4, 
    "e": 5, 
    "f": 6, 
    "g": 7, 
    "h": 8, 
    "i": 9
}"""

import json

lettersList = json.loads(t)
for char in lettersList:
    print lettersList[char]

lettersList = json.loads(t)
for char in sorted(lettersList):    # sort your keys before printing
    print lettersList[char]

输出:

# not sorted
1
3
2
5
4
7
6
9
8

# sorted keys
1
2
3
4
5
6
7
8
9