在列中的一行上打印字典对和下一个迭代的对



我有一个100+唯一(名称不重复)键/值对的长列表,我想打印合并成两个等宽列。

  • 我如何得到下一个迭代的键/值?(即我如何在同一迭代中打印两个键/值对?)
  • 我如何让这些对在40个字符宽度的两列中打印一双鞋的最大宽度和最长长度是多少?

当前循环:

for key in example:
print(f'{key}: {example[key]}')

字典示例:

example = {
'key0': 'val0',
'key1': 'val1',
'key2': 'val2',
'key3': 'val3',
'key4': 'val4',
'key5': 'val5'
}

预期的结果:

key0: val0            key1: val1
key2: val2            key3: val3
key4: val4            key5: val5

您可以逐个遍历键列表

keys = list(example.keys())
for i in range(0,len(keys),2):
key1 = keys[i]
key2 = keys[i+1]
print("%s:%s       %s:%s"%(key1,example[key1],key2,example[key2]))

输出:

key0:val0       key1:val1
key2:val2       key3:val3
key4:val4       key5:val5

请不要问两个不同的问题。我只回答如何按你想要的方式遍历字典。还有很多其他问题可以解释如何将格式设置为固定宽度的字段。

使用itertools.islice()对字典中的奇数和偶数元素进行切片,然后使用zip()将它们配对。

from itertools import islice, zip_longest
for (key1, value1), (key2, value2) in 
zip_longest(islice(example.items(), 0, None, 2), 
islice(example.items(), 1, None, 2), 
fillvalue = (None, None)):
if key2 is not None:
print(f'{key1}: {value1}  {key2: value2}')
else:
print(f'{key1}: {value1}')

这行得通:

example = {
"key0": "val0",
"key1": "val1",
"key2": "val2",
"key3": "val3",
"key4": "val4",
"key5": "val5",
}
max_width = max([len(f"{k}: {v}") for k, v in example.items()])
column_width = max(40, max_width)
keys = list(example.keys())
values = list(example.values())
for i in range(0, len(keys) - 1, 2):
left_key = keys[i]
right_key = keys[i + 1]
left_value = values[i]
right_value = values[i + 1]
n_spaces = column_width - len(f"{left_key}: {left_value}")
print(f"{left_key}: {left_value}" + " " * n_spaces + f"{right_key}: {right_value}")

另一个方法:

from itertools import zip_longest
i = iter(example.items())
for col1, col2 in zip_longest(i, i):
col1 = f"{col1[0]}: {col1[1]}"
col2 = f"{col2[0]}: {col2[1]}" if col2 else ""
print(f"{col1:<40} {col2:<40}")

打印:

key0: val0                               key1: val1                              
key2: val2                               key3: val3                              
key4: val4                               key5: val5                              

如果您想将格式化的数据打印到控制台,也许可以使用富库?

from rich.console import Console
from rich.table import Table
from itertools import zip_longest
console = Console()
table = Table(show_header=False)
lst = iter(example.items())
for (k1, v1), (k2, v2) in zip_longest(lst, lst, fillvalue=("", "")):
table.add_row(k1, v1, k2, v2)
console.print(table)

输出(在实际控制台上看起来更好…):

┏━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┓
┃ key0 ┃ val0 ┃ key1 ┃ val1 ┃
│ key2 │ val2 │ key3 │ val3 │
│ key4 │ val4 │ key5 │ val5 │
│ key6 │ val6 │      │      │
└──────┴──────┴──────┴──────┘

最新更新