在2个不同的列中打印字典

时间:2017-01-03 17:41:30

标签: python python-3.x dictionary formatting

我有这种格式的字典:

my_dict = {'a':{'x':10}, 'b':{'z':7}, 'w':{'y':4}, 'y':{'q':1}, 'q':{'m':15}, 't':{'z':34}, 's':{'y':44}}

每个字符串都映射到{string:value}的字典。我想打印第一个字符串,以及字典中的字符串。 我希望它在2列中,如下所示:

a:x | b:z
w:y | y:q
q:m | t:z
s:y |

我该怎么做?

for key, value in my_dict.items():
    print('{}:{}'.format(key, value.key?))

1 个答案:

答案 0 :(得分:0)

这应该可以解决问题。它不会打印出完全您想要的内容,因为内置的dict被散列并因此无序。下面的chunk函数将列表均匀地拆分为n大小的块。因此,您需要使用my_dict.items()对字典进行迭代,并在my_dict.items()中的每个元素中创建对。

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i+n]

pairs = chunks(list(my_dict.items()), 2)

设置对后,您所要做的就是适当地为pairs中的元素编制索引。 list(x[0][1].keys())[0]语法只是从嵌套字典中获取密钥,并假设您的嵌套字典只包含一个密钥。

for x in pairs:
    if len(x) > 1:
        print("{}: {} | {}: {}".format(x[0][0], list(x[0][1].keys())[0], x[1][0], list(x[1][1].keys())[0]))
    else:
        print("{}: {}".format(x[0][0], list(x[0][1].keys())[0]))

打印出来:

b: z | s: y
w: y | y: q
q: m | t: z
a: x

编辑:根据下面的评论,是的,有一种方法可以按字母顺序打印。只需在sorted返回的列表中使用list(my_dict.items()),就可以按每个元组中的第一个元素进行排序。

res = sorted(list(my_dict.items()), key = lambda x: x[0])

# new chunks based on sorted list
pairs = chunks(res, 2)

pairs看起来像这样(它实际上是一个发电机,但它的内幕就是这个):

[[('a', {'x': 10}), ('b', {'z': 7})], [('q', {'m': 15}), ('s', {'y': 44})], [('t', {'z': 34}), ('w', {'y': 4})], [('y', {'q': 1})]]

从那里,您可以使用上面相同的for循环...