【发布时间】:2016-05-20 23:03:34
【问题描述】:
我想在两列中显示一个字典。我基本上是在尝试做this question 试图通过列表实现的目标,但我需要用字典来完成。
我的脚本打印当前文件夹的目录列表,并带有数字。
这是脚本:
import os
files = os.listdir(os.curdir) #get directory listing
final_dic = dict() #initialize the dictionary
x = 1
for item in files: #associate index numbers with the filenames
final_dic[x] = item
x+=1
print '''
-------------
| FILE LIST |
-------------
'''
for k, v in final_dic.iteritems(): #print out the enumerated listing
print ('{0}: {1}'.format(k, v))
num = int(raw_input('\nEnter no. of file: ')) #have user select file by no.
print ('\n{0}\n'.format(final_dic[num])) #print out corresp. filename
文件列表的输出是:
-------------
| FILE LIST |
-------------
1: file1
2: file2
3: file3
etc.
问题是在有很多文件的文件夹中,列表会滚动到屏幕顶部,所以我希望能够像这样显示列表:
1: file1 4: file4
2: file2 5: file5
3: file3 6: file6
etc.
从上面链接的问题来看,zip 似乎需要两个列表并从中创建一个字典,但我已经有了一个字典。
那么,有没有办法做到这一点?
添加评论:一些 cmets 提到我应该使用列表,但不幸的是它必须是字典。这只是更大脚本的一部分。
【问题讨论】:
-
是的,但是没有很好的分栏器;你必须自己编写逻辑来确定你想要多少列,然后以总/列作为你的步进循环。你会对行而不是列感到满意吗?这样会更容易。
-
不回答您的问题,但您不需要字典,您可以使用列表,因为您希望键只是数字
-
我确实需要它作为字典,因为索引号。还与文件 ID 相关联,这是脚本实际设计使用的文件 ID。我把其余的都省略了,因为它与问题无关。
-
这比您想象的要困难,具体取决于您希望事情的动态程度,因为几乎可以有任意数量的文件(因此文件编号中的位数可能会有所不同)和一些文件名可能很长——您希望在某些(未定义的)最大打印宽度内将所有文件名放入两列中。足够强大以优雅地处理所有这些变量的东西将相对较长和复杂。最好的办法是找到一个现有的模块来完成你需要的部分或全部工作。
-
@martineau 我也是这么想的。我想链接到某个模块,但找不到合适的模块。有tabulate,它打印出非常漂亮的表格,但它没有执行要求的分列...知道要使用什么吗?
标签: python dictionary formatting