如何在字典键上交替使用大写和小写? Python 3

时间:2018-11-15 18:07:24

标签: python python-3.x dictionary uppercase lowercase

即时通讯是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)

但似乎我不知道自己在做什么。 任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:1)

使用text/plainitertools(以保证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.cyclestr.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())