即时通讯是python 3的新功能。
我想做的是交替使用大写和小写字母,但只能在字典键上。
我的字典是从列表创建的,其关键字是单词(或列表元素),其值是该元素出现在列表中的时间。
kb = str(input("Give me a string: "));
txt = kb.lower(); #Turn string into lowercase
cadena = txt.split(); #Turn string into list
dicc = {};
for word in cadena:
if (word in dicc):
dicc[word] = dicc[word] + 1
else:
dicc[word] = 1
print(dicc)
使用此代码,我可以获得例如:
input: "Hi I like PYthon i am UsING python"
{'hi': 1, 'i': 2, 'like': 1, 'python': 2, 'am': 1, 'using': 1}
但是我想要得到的实际上是:
{'hi': 1, 'I': 2, 'like': 1, 'PYTHON': 2, 'am': 1, 'USING': 1}
我尝试使用这个:
for n in dicc.keys():
if (g%2 == 0):
n.upper()
else:
n.lower()
print(dicc)
但似乎我不知道自己在做什么。 任何帮助,将不胜感激。
答案 0 :(得分:1)
使用text/plain
和itertools
(以保证Python <3.7中的顺序)
设置
collections.OrderedDict
首先,创建一个import itertools
from collections import OrderedDict
s = 'Hi I like PYthon i am UsING python'
switcher = itertools.cycle((str.lower, str.upper))
d = OrderedDict()
final = OrderedDict()
只是为了计算列表中字符串的出现(因为您希望匹配基于输出结果不区分大小写):
OrderedDictionary
接下来,使用for word in s.lower().split():
d.setdefault(word, 0)
d[word] += 1
调用键上的itertools.cycle
或str.lower
并创建最终字典:
str.upper
for k, v in d.items():
final[next(switcher)(k)] = v
print(final)
答案 1 :(得分:0)
您的n in dicc.keys()
行是错误的。您正在尝试将n
用作键数组中的位置和键本身。
也不需要分号。
这应该做您想要的:
from collections import OrderedDict
# Receive user input
kb = str(input("Give me a string: "))
txt = kb.lower()
cadena = txt.split()
dicc = OrderedDict()
# Construct the word counter
for word in cadena:
if word in dicc:
dicc[word] += 1
else:
dicc[word] = 1
如果您只想用交替大小写的方式打印输出,则可以执行以下操作:
# Print the word counter with alternating case
elems = []
for i, (word, wordcount) in enumerate(dicc.items()):
if i % 2 == 0:
word = word.upper()
elems.append('{}: {}'.format(word, wordcount)
print('{' + ', '.join(elems) + '}')
或者您可以制作一个带有交替大小写的新OrderedDict ...
dicc_alt_case = OrderedDict((word.upper() if (i % 2 == 0) else word, wordcount)
for word, wordcount in dicc.items())