python - 如何对字典进行排序?

标签 python dictionary

问题是我直接从 txt 文件中提取的房间号和客人详细信息的列表,需要将其放入字典中,房间号作为键,详细信息作为值。

客人名单字面意思就是一个列表,每一项代表房间号、客人姓名、到达、离开日期。旁边没有任何东西的房间是空的。

nlist = [['101'], ['102'], ['103'], 
['201', ' John Cleese', ' 5/5/12', ' 5/7/12'], ['202'], 
['203', ' Eric Idle', ' 7/5/12', ' 8/7/12'], ['301'], ['302'], ['303']]

基本上,必须将其放入字典中。这是我尝试过的:

guests = {}
for i in nlist:
        if len(i) == 1:
            key = i[0]
            guests[key] = None
        else:
            key = i[0]
            val = i[1],i[2],i[3]
            guests[key] = val

这给了我:

guests = {'201': (' John Cleese', ' 5/5/12', ' 5/7/12'), 
'203': (' Eric Idle', ' 7/5/12', ' 8/7/12'), '202': None, '301': None, 
'302': None, '303': None, '102': None, '103': None, '101': None}

如您所见,字典没有按特定顺序排列。然而,对于这个特定的练习,字典需要按照从最低到最高房间号的顺序排列。我想我认为它只会从头到尾遍历每个内部列表,对其进行测试,然后按该顺序构建字典。

有谁知道如何正确编写代码以使字典显示为 {'101': None, '102', None, '103': None... etc.)?希望有人能解释为什么我的代码也没有按我的预期工作。

最佳答案

标准 Python 字典本质上是无序的。

一种可能是使用 OrderedDict .它将保留插入顺序,这意味着您必须按照随后希望检索它们的顺序插入条目。

另一种可能性是保持 dict 不变,但按所需顺序迭代:

for k, v in sorted(guests.items()):
  print k, v

最后,应注意您的示例将房间号存储为字符串而不是整数。这意味着排序是字典顺序的 ('90' > '100')。由于这是家庭作业,我将其留作阅读练习以弄清楚如何解决此问题。

关于python - 如何对字典进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10622597/

相关文章:

python - 如何在 matplotlib 中计算极坐标图密度

python - 从命令行创建项目

python - 导入错误 : cannot import name '_remove_dead_weakref'

python - time.time 和 time.clock 和有什么不一样?

arrays - 调用中缺少参数 arrayLiteral

scala - 在 Scala 中,如何在 Map 的二元运算中将元组值分配给变量?

python - 为什么 mydict.items().sort() 不起作用?

python - 如何配置 matplotlib 以能够从本地路径读取字体?

Python递归查找 parent 的儿子

python - 使用 map(function, list) 来转换对象而不返回列表是否合适?