我有这种格式的字典:
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?))
答案 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
循环...