Rob*_*xal 1 python string dictionary
我有一个字典中充满了字符串值的kv对,我希望每个==>字符都用&分隔,然后打印到换行符.
我使用数组来调解转换,这似乎是不必要的和不优雅的.如果可能的话,我想在一行中做到这一点.
这就是我所拥有的:
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)
Run Code Online (Sandbox Code Playgroud)
这将打印:
b ==> 2
c ==> 3
a ==> 1
Run Code Online (Sandbox Code Playgroud)
顺序无关紧要(否则我只是使用OrderedDict.)重要的是所有kv对都以正确的格式打印.
以下单行将做:
foo_text = '\n'.join('{} ==> {}'.format(*t) for t in foo_dict.items())
Run Code Online (Sandbox Code Playgroud)
或者我们可以使用starmap(..):
from itertools import starmap
foo_text = '\n'.join(starmap('{} ==> {}'.format,foo_dict.items()))
Run Code Online (Sandbox Code Playgroud)
两者都产生:
>>> '\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'
Run Code Online (Sandbox Code Playgroud)
str.join只接受任何类型的iterable,所以我们可以使用生成器或列表.我们还可以通过使用列表理解来提升前者:
foo_text = '\n'.join(['{} ==> {}'.format(*t) for t in foo_dict.items()])
Run Code Online (Sandbox Code Playgroud)
这就是说,简单地写一个单行因为它是可能的并不是一个好理由.您应该始终考虑可读性(因为它不会改变时间复杂性或对效率产生重大影响).在这种情况下,这可能不是问题.但是隐密的单行是非Pythonic.