问题是我直接从 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/