Skip to main content
 首页 » 编程设计

python之如何使用 python 将字符串字典转换为文本 block

2025年05月04日18bjzhanghao

我有一个充满字符串值 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。