从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
为什么这些值交错,如何防止这种情况发生? 我应该用互斥锁锁定变量的访问吗?
答案 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