根据键升序对python中的字典进行排序

时间:2019-08-23 09:18:28

标签: sorting dictionary

我有字典:

我正在使用内置函数对字典dict(sorted(d.items()))进行排序

我希望我的输出像:

{'0':'0','1':'0','2':'0','3':'1245','4':.......}

但是现在键的顺序是0,1,10,100

我想拥有1,2,3,4 ...

d={'113': '5', '114': '305', '115': '50', '116': '0', '117': '0', '118': '0', '119': '0', '12': '1245', '120': '0', '121': '0', '122': '10', '123': '10', '124': '0', '125': '0', '126': '0', '127': '0', '128': '0', '129': '610,'0': '0', '1': '0', '10': '0', '100': '0', '101': '0', '102': '0', '103': '0', '108': '0', '109': '194', '11': '0', '110': '340', '111': '0', '112': '10', '', '13': '0', '130': '20','104': '120', '105': '105', '106': '0', '107': '0'}

print(dict(sorted(d.items())))

输出看起来像这样

{'0': '0', '1': '0', '10': '0', '100': '0', '101': '0', '102': '0', '103': '0', '104': '120', '105': '105', '106': '0', '107': '0', '108': '0', '109': '194', '11': '0', '110': '340', '111': '0', '112': '10', '113': '5', '114': '305', '115': '50', '116': '0', '117': '0', '118': '0', '119': '0', '12': '1245', '120': '0', '121': '0', '122': '10', '123': '10', '124': '0', '125': '0', '126': '0', '127': '0', '128': '0', '129': '610', '13': '0', '130': '20'}

请以正确的方式帮助我以这种方式对其进行排序。

3 个答案:

答案 0 :(得分:1)

如果要对项目进行排序,则以后不能将其保留在字典中。字典不保留顺序。

这将为您提供输出作为排序列表:

sorted(d.items(), key=lambda x: int(x[0]))

答案 1 :(得分:0)

由于您希望对已排序的字典进行从零开始的索引编制,因此以下解决方案应适用于您的用例。

a = dict(sorted(d.items()))
res = {}
ctr=0
for i in a.keys():
  res[ctr] = a[i]
  ctr+=1

print(res)

答案 2 :(得分:0)

您可以使用OrderedDict

awk 'FNR==NR{a[$1]=$2 FS $3;next}{ print $0, a[$1]}' file2.csv file1.csv