问题是房间号和客人详细信息列表我直接从一个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']]
Run Code Online (Sandbox Code Playgroud)
基本上,必须把它变成字典.这是我试过的:
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
Run Code Online (Sandbox Code Playgroud)
这给了我:
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}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,字典按特定顺序排列在一起.但是对于这个特定的练习,字典需要从最低到最高的房间号.我想我认为它会从头到尾遍历每个内部列表,测试它,然后按顺序构建字典.
有没有人知道如何正确编写代码,以便字典出现{{101':无,'102',无,'103':无......等等)?希望有人可以解释为什么我的代码不能像我预期的那样工作.
NPE*_*NPE 10
标准Python字典本质上是无序的.
一种可能性是使用OrderedDict.它将保留插入顺序,这意味着您必须按照您希望检索它们的顺序插入条目.
另一种可能性是保持dict原样,但按所需顺序迭代:
for k, v in sorted(guests.items()):
print k, v
Run Code Online (Sandbox Code Playgroud)
最后,应该注意的是,您的示例将房间号码存储为字符串而不是整数.这意味着排序是lexicographic('90' > '100').由于这是作业,我把它留作阅读练习,以弄清楚如何解决这个问题.
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |