列表中的无意随机顺序[重复]
Posted
技术标签:
【中文标题】列表中的无意随机顺序[重复]【英文标题】:Unintentional random order in a list [duplicate] 【发布时间】:2019-11-09 03:09:34 【问题描述】:我正在尝试使用 JSON 对象的数据构建一个列表。但是列表的顺序与 JSON 对象的顺序不匹配,并且几乎每次我运行代码时都会发生变化。
"project":
"Projektnamen":
"Server":
"Server1":
...
,
"Server2":
...
,
"Server3":
...
with open('json_data.json') as json_file:
# json CONFIG_JSON Konfigurationsdatei
CONFIG_JSON = json.load(json_file)
for key in CONFIG_JSON["project"]["Projektnamen"]["Server"]:
servernamen.append(key)
预期结果:servernamen = [Server1, Server2, Server3]
但是顺序总是会改变。 最后结果:servernamen = [Server3, Server1, Server2]
【问题讨论】:
可能在 Python 3.6 数组(或者更确切地说是字典)之前不必保持顺序。如果您需要订单,最好将其保留为列表。 字典不保证顺序。 @TheScientificMethod 该信息已过时。请参阅 ***.com/a/47881325/4014959 OTOH,JSON 规范不要求
对象保留顺序,因此通常不拥有期望它们保留顺序的数据流。
【参考方案1】:
您可以导入已使用collections.OrderedDict
和json.load
的参数排序的JSON 数据:
from collections import OrderedDict
import json
r = json.load(open('json_data.json'), object_pairs_hook=OrderedDict)
【讨论】:
【参考方案2】:json.loads
将 JSON 反序列化为字典对象,这是一个无序的哈希表。
您可以使用collections
中的OrderedDict
对键进行排序。
示例
from collections import OrderedDict
d = 'banana': 3, 'apple':4, 'pear': 1, 'orange': 2
new_d = OrderedDict(sorted(d.items()))
print(new_d)
# OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
【讨论】:
有没有办法按顺序加载JSON? 响应中添加的解决方案以上是关于列表中的无意随机顺序[重复]的主要内容,如果未能解决你的问题,请参考以下文章
导入random模块, 生成0-100间所有数字的随机列表(列表中的数字不重复)