2016-12-13 75 views
-1

是否可以从for循环保存多个打印为字符串变量?基于整数值重复字符串的字符串键并形成一个字符串

E.g.我有一本字典,它有字母作为键,每个键的值代表键应该打印的频率。整个打印输出应该是一个字符串,然后保存为变量。简单的例子:

hand = {'a':1, 'q':1, 'l':3, 'm':1, 'u':1, 'i':1} 
for letter in hand.keys(): 
    for j in range(hand[letter]): 
     print(letter, end="") #should print out e.g. uilllqma 

我知道我可以追加项目与for循环,但是,想知道如果我可以从打印输出直接做的每一次迭代的(空)名单(无添加先列表,然后将列表打印为字符串)。

a = ... #assign e.g. uilllqma to a 
print(a) #prints 'uillqma' 
+0

“uillqma”的值来自哪里,因此可以赋值给变量'a'? – martineau

+0

从字典... – pythonbrutus

回答

1

乘法说n通过n次重复原始字符串的值。例如:

>>> hand = {'a':1, 'q':1, 'l':3, 'm':1, 'u':1, 'i':1} 
>>> for k, v in hand.items(): 
...  print(k * v) 
... 
a 
i 
m 
lll 
q 
u 

因此,为了让所有的结果作为一个字符串,你可以加入发电机表达为:

>>> ''.join(k*v for k, v in hand.items()) 
'aimlllqu' 
+0

非常流畅!谢谢! – pythonbrutus

0

你知道订单无法保证与dict他们是无序的。

但是你可以做一个发电机表达join()

与整数值的字符串
>>> print(''.join(k for k, v in hand.items() for _ in range(v))) 
lllmaiuq 
+0

是的,意识到这一点,但在这种情况下并不重要。感谢您的解决方案,效果很好 – pythonbrutus

0

或者你可以简单的串连字母:

hand = {'a':1, 'q':1, 'l':3, 'm':1, 'u':1, 'i':1} 
new_str = "" 
for letter in hand.keys(): 
    for j in range(hand[letter]): 
     new_str += letter 

但使用.join()代替更加简洁。