const dic = {};
dic['1']='a'
dic['6'] = 'z'
dic['5']='c'
console.log(dic)
上面是一段js代码,控制台输出结果如下:
可以看到js里面默认是以键值进行排序,那我们看看在python里面是不是也默认按照键值排序呢
if __name__ == '__main__':
dic=dict()
dic['1']='a'
dic['6'] = 'z'
dic['5']='c'
print(dic)
输出结果是 {'1': 'a', '6': 'z', '5': 'c'},基于此可以得出结论:不是!
那我在js里面如何得到按插入顺序的字典呢?
很简单,只需要在一系列字典外面套一层列表
const dic = [];
const key=['1','6','5']
const value=['a','z','c']
var t_dic;
for (let i = 0; i < 3; i++) {
t_dic = {}
t_dic[key[i]] = value[i]
dic.push(t_dic)
}
console.log(dic)
第一次插入{’1':'a'} 第二次:{’6‘:’z'} 第三次:{'5':'c'}
最后结果得到了我们想要的
---------------------------2022-5-21补充:
const dic = {};
dic['1']='a'
dic['6'] = 'z'
dic['5']='c'
console.log(dic)
在这里dic其实是一个对象
而我们基于这样的事实:js里面对象的属性“有特别的顺序”:整数属性会被进行排序,其他属性则按照创建的顺序显示
例如:
let codes = {
"49": "Germany",
"41": "Switzerland",
"44": "Great Britain",
// ..,
"1": "USA"
};
for(let code in codes) {
alert(code); // 1, 41, 44, 49
}
可以看出打印的依次是 "1"、"41"...
而非整数属性是按照我们定义的顺序进行排序,如下所示:
let user = {
name: "John",
surname: "Smith"
};
user.age = 25; // 增加一个
// 非整数属性是按照创建的顺序来排列的
for (let prop in user) {
alert( prop ); // name, surname, age
}
在这里的整数属性”指的是一个可以在不做任何更改的情况下与一个整数进行相互转换的字符串。
例如:
// Number(...) 显式转换为数字
// Math.trunc 是内建的去除小数部分的方法。
alert( String(Math.trunc(Number("49"))) ); // "49",相同,整数属性
alert( String(Math.trunc(Number("+49"))) ); // "49",不同于 "+49" ⇒ 不是整数属性
alert( String(Math.trunc(Number("1.2"))) ); // "1",不同于 "1.2" ⇒ 不是整数属性
所以,"49"
是一个整数属性名,因为我们把它转换成整数,再转换回来,它还是一样的。但是 “+49” 和 “1.2” 就不行了:
于是我们会想到在整数前面加一个'+',使得整数属性变成非整数属性:
let codes = {
"+49": "Germany",
"+41": "Switzerland",
"+44": "Great Britain",
// ..,
"+1": "USA"
};
for (let code in codes) {
alert( +code ); // 49, 41, 44, 1
}
按照这种思路就可以实现按照属性定义的顺序进行排序!