Python加载排序的JSON DICE在Windows和Linux中不一致



我正在使用python 3.6来处理我在包含具有排序键的dict的文本文件中收到的数据。这样的文件的一个示例可以是:

{" 0.1":" A"," 0.2":" B"," 0.3":" C"," 0.4":" D"," 0.5"," E"," 0.6":" F F"," 0.7":" G"," 0.8":" H"," 0.9":" I"," 1.0":" J"}

我的数据负载和变换很简单 - 我加载文件,然后将dict转换为元组列表。简化了看起来像这样:

import json
import decimal
with open('test.json') as fp:
    o = json.loads(fp.read())
l = [(decimal.Decimal(key), val) for key, val in o.items()]
is_sorted = all(l[i][0] <= l[i+1][0] for i in range(len(l)-1))
print(l)
print('Sorted:', is_sorted)

列表始终在Windows中排序,而从未在Linux中进行排序。我知道我可以手动对列表进行排序,但是由于数据文件始终已经排序,而且相当大,所以我正在寻找一种不同的方法。有没有办法以某种方式强制JSON软件包将数据加载到Windows和Linux中的DICT上?

进行澄清:我无法控制收到的数据结构。我的目标是找到将数据加载到元组列表中的最有效方法,以从我获得的进一步处理中进行进一步处理。

词典只是其键和相应值之间的映射。它没有任何订单。说您总是发现它们被分类是没有意义的。此外,任何字典的成员访问均为 O(1),因此它可能足够快以满足您的需求。如果您认为您仍然需要一些订单,则有序字典可能很有用。

dicts在python中是无序的对象,因此您遇到的问题实际上是通过设计。

如果您想获取分类列表,则可以执行以下操作:

sorted_tuples = sorted(my_dict.items(),key=lambda x:x[0])

import operator sorted_tuples = sorted(my_dict.items(),key=operator.itemgetter(0)

dict方法 .items()将dict转换为列表的元组和 sorted()列表。分类的key参数说明了如何对列表进行排序。lambda x: x[0]operator.itemgetter(0)都选择元组的第一个元素(原始dict的键(,然后在该元素上排序。

最新更新