我有一个充满字符串值 k-v 对的字典,我希望每个都用 ==>& 分隔,然后打印到换行符。
我使用数组来调解转换,这似乎是不必要且不优雅的。 如果可能,我想在一行中完成。
这是我所拥有的:
foo_dict = {
'a' : '1',
'b' : '2',
'c' : '3',
}
foo_list = []
for k, v in foo_dict.items():
foo_list.append('{} ==> {}'.format(k, v))
foo_text = '\n'.join(foo_list)
这将打印:
b ==> 2
c ==> 3
a ==> 1
顺序无关紧要(否则我只会使用 OrderedDict。)重要的是所有 k-v 对都以正确的格式打印。
请您参考如下方法:
下面一行就可以了:
foo_text = '\n'.join('{} ==> {}'.format(*t) for t in foo_dict.items())
或者我们可以使用starmap(..):
from itertools import starmap
foo_text = '\n'.join(starmap('{} ==> {}'.format,foo_dict.items()))
两者都产生:
>>> '\n'.join('{} ==> {}'.format(*t) for t in foo_dict.items())
'b ==> 2\na ==> 1\nc ==> 3'
>>> '\n'.join(starmap('{} ==> {}'.format,foo_dict.items()))
'b ==> 2\na ==> 1\nc ==> 3'
str.join 只接受任何类型的 iterable 因此我们可以使用生成器或列表。我们还可以通过使用列表理解来稍微提升前者:
foo_text = '\n'.join(['{} ==> {}'.format(*t) for t in foo_dict.items()])
话虽这么说,但请注意,仅仅因为可能而写一行并不是一个好的理由。您应该始终追求可读性(假设它不会改变时间复杂性或对效率产生重大影响)。在这种情况下,这可能不是问题。但神秘的一行代码非 Pythonic。
