我有这样的字典:
dict = {1: [x, y, z], 2: [x1, y1, z1]}
进一步,我在字典中添加另一个键“1e”,它变成这样:
dict = {1: [x, y, z], 2: [x1, y1, z1], '1e': [x2, y2, z2]}
最后我需要按顺序 1、1e、2 的 dict。
所以预期的结果一定是这样的:
dict = {1: [x, y, z], '1e': [x2, y2, z2],2: [x1, y1, z1]}
如何将 1e 的索引从 2 更改为 1?
p.s.:x 值是作为 str 的日期,尝试使用不同方法按值 x 排序,但没有任何效果。返回 float 和 str 无法排序的错误。 我已经尝试过这样的smh:
new_dict = OrderedDict(sorted(dict.items(), key=lambda t: t[1]))
还有:
new_dict = sorted(dict.items(), key=lambda x: datetime.strptime(x[1],'%Y-%m-%d'), reverse=True)
第二种方法错误是找到strptime。
从 python 3.6 开始,
dict
是按顺序插入的。这允许我们以任意顺序将键插入 dict
并保留该顺序:
d = {1: '[x, y, z]', 2: '[x1, y1, z1]'}
d['1e'] = '[x2, y2, z2]'
print(d)
keys = [1, '1e', 2]
d = {k:d[k] for k in keys}
print(d)
输出:
{1: '[x, y, z]', 2: '[x1, y1, z1]', '1e': '[x2, y2, z2]'}
{1: '[x, y, z]', '1e': '[x2, y2, z2]', 2: '[x1, y1, z1]'}
如您所见,订单已更改为您需要的内容。
要更改键的顺序,您需要根据按所需顺序排序的项目重新创建字典:
d = {1: ["x", "y", "z"], 2: ["x1", "y1", "z1"], '1e': ["x2", "y2", "z2"]}
d = dict(sorted(d.items(),key=lambda k:str(k[0])))
print(d)
{1: ['x', 'y', 'z'], '1e': ['x2', 'y2', 'z2'], 2: ['x1', 'y1', 'z1']}