atomicNumber = {'Rubidium(Rb)':37, 'Lithium(Li)': 2, 'Argon(Ar)': 18 ,'Sodium(Na)': 11, 'Potassium(K)':19, 'Hydrogen(H)': 1,}
sort_atomicNumber = dict(sorted(atomicNumber.items(), key = lambda x: x[0]))
print(sort_atomicNumber)
我正试着用钥匙把字典分类。如果我像上面那样使用lambda表达式,排序就起作用了。但在这里,当我使用符号x[0]时,我感到困惑。为了按键名排序,不是应该是x[0][0]吗???你知道吗
我可以看到目录项()看起来类似于元组列表,那么为什么在排序时x[0]返回string对象,而在下面的元组列表'AtmNum'中lambda返回元组呢?你知道吗
dict_items([('Rubidium(Rb)', 37), ('Lithium(Li)', 2), ('Argon(Ar)', 18), ('Sodium(Na)', 11), ('Potassium(K)', 19), ('Hydrogen(H)', 1)])
AtmNum = [('Rubidium(Rb)', 37), ('Lithium(Li)', 2), ('Argon(Ar)', 18), ('Sodium(Na)', 11), ('Potassium(K)', 19), ('Hydrogen(H)', 1)]
f = lambda x:x[0]
print(f(AtmNum))
输出: (‘铷(Rb)’,37)
在
lambda中用作排序键的x是由
.items()
生成的(key, value)
元组。正如您在实验中注意到的,.items()
生成这些元组的(iterable)列表,sorted
通过对每个元素应用lambda来迭代列表并检查其顺序。因此,在第一个示例中,lambda引用了用.items()
创建的iterable的元素。你知道吗与此相反,在第二个例子中:
x
现在是整个列表,因此合理地说x[0]
引用它的第一个元素。你知道吗atomicNumber.items()
生成tuple
,因此,例如,在第一次迭代中,生成的tuple
是('Rubidium(Rb)', 37)
(由x
引用),因此,x[0]
将是键,x[1]
将是值。你知道吗当您试图模仿它时,您将
dict_items
作为参数传递给lambda
函数,而在sorted
函数中,dict_items
内的tuple
就是传递给lambda
函数的那些。所以,正确的模仿应该是这样的:输出:
为什么排序后要转换为
dict
?sort_atomicNumber = dict(sorted(...))
导致数据再次被取消排序。你知道吗您可以改用
collection.OrderedDict
:输出为
当您希望按键排序时,不需要对
key=lambda...
使用sorted()
,因为dict.items()
返回的数据已经包含前面的键。你知道吗相关问题 更多 >
编程相关推荐