使用列表Py3.8更改字典中的键索引

问题描述 投票:0回答:2

我有这样的字典:

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 python-3.x list dictionary indexing
2个回答
0
投票

从 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]'}

如您所见,订单已更改为您需要的内容。


0
投票

要更改键的顺序,您需要根据按所需顺序排序的项目重新创建字典:

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']}
© www.soinside.com 2019 - 2024. All rights reserved.