我有一个简单的字典:
convert = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}
和列表
letters = ('a', 'b', 'c', 'd')
我想迭代列表中的每个元素,并将其用作字典中的查找,并将值打印为连接字符串。我正在使用:
for c in letters:
print convert[c],
输出:
1 2 3 4
如何删除print语句中的空格(在v.2.7.10中)以获取:
1234
答案 0 :(得分:4)
将join
与生成器表达式一起使用。
请注意,使用此方法时必须明确转换为str
:
convert = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}
letters = ('a', 'b', 'c', 'd')
print ''.join(str(convert[c]) for c in letters)
>> 1234
<强>更新强>
如果您想使用显式for
循环,可以创建一个字符串列表,附加到该字符串并在循环外调用join
。我使用列表因为它更有效,因为字符串是不可变的:
output_list = []
for c in letters:
# do other stuff
output_list.append(str(convert[c]))
print ''.join(output_list)
答案 1 :(得分:1)
如果你想要的只是print
并且你不需要最终结果,那么你可以使用arg
print
方法:
>>> from __future__ import print_function
>>> for c in letters:
print(convert[c], sep='', end='')
1234
答案 2 :(得分:1)
试试这个: -
>>> convert = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}
>>> letters = ('a', 'b', 'c', 'd')
>>> result = ''
>>> for i in letters:
result += str(convert[i]) # Since you want concatenated string
>>> print result
'1234'
或使用列表理解: -
>>> convert = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}
>>> letters = ('a', 'b', 'c', 'd')
>>> ''.join([str(convert[i]) for i in letters])
'1234'
答案 3 :(得分:0)
要摆脱print
引入的额外空格,您可以使用sys.stdout.write()
将数据写入标准输出:
In [55]: letters = ('a', 'b', 'c', 'd')
In [56]: convert = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}
In [57]: import sys
In [58]: for letter in letters: sys.stdout.write(convert[letter])
1234
作为旁注,此处提出的大多数解决方案(包括我的解决方案)会为您提供的输入数据生成预期输出,但请查看如果letters
包含字母(例如'e'
}会发生什么情况)这不是convert
中的关键:
In [59]: letters = ('a', 'b', 'c', 'd', 'e')
In [60]: print ''.join(str(convert[letter]) for letter in letters)
Traceback (most recent call last):
File "<ipython-input-60-da3963dcc14b>", line 1, in <module>
print ''.join(str(convert[letter]) for letter in letters)
File "<ipython-input-60-da3963dcc14b>", line 1, in <genexpr>
print ''.join(str(convert[letter]) for letter in letters)
KeyError: 'e'
为避免这种情况,我建议您使用dict.get()
,因为此方法返回默认值(下例中为''
),而不是在字符中没有键时引发错误:< / p>
In [61]: print ''.join(str(convert.get(letter, '')) for letter in letters)
1234
答案 4 :(得分:0)
只是想添加一个使用reduce
的替代方案,虽然它不一定更具可读性,但以后可能更灵活。如果您需要更改代码以执行其他操作,则只需调整lambda
函数:
>>> print reduce(lambda x,y: str(x)+str(y),[convert[z] for z in letters])
1234
或更具可读性:
>>> def concat_letters(x,y):
return str(x)+str(y)
>>> print reduce(concat_letters,[convert[z] for z in letters])
1234