【问题标题】:How to alternate lower and upper case on dictionary keys? Python 3如何在字典键上交替小写和大写?蟒蛇 3
【发布时间】:2019-04-18 21:53:12
【问题描述】:

我是 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)

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

【问题讨论】:

  • 您将键与其在键数组中的位置混淆
  • 另外,请注意字典顺序在 python 3.7 之前是不确定的。无论如何,我个人不会依赖字典顺序;改用collections.OrderedDict
  • 您只是想用大写/小写模式打印您的密钥,还是您真的想修改 dict 以便您的密钥以大写和小写交替顺序排列?
  • 你想从字符串“bad bad bad”中得到什么?你想要字典 {"bad": 3} 还是 {"bad":2, "BAD":1}
  • 另外...您需要了解字典在 Python 中的工作方式。您从哪里得知.item() 会起作用?

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


【解决方案1】:

使用itertoolscollections.OrderedDict(在 Python

设置

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.lowerstr.upper 并创建最终字典:

for k, v in d.items():
    final[next(switcher)(k)] = v

print(final)

OrderedDict([('hi', 1), ('I', 2), ('like', 1), ('PYTHON', 2), ('am', 1), ('USING', 1)])

【讨论】:

  • 可以泛化为循环遍历(op.methodcaller('lower'), op.methodcaller('upper'))
  • 嘿,谢谢!这给了我一个想法,实际上我正在尝试修改字典,但这肯定对我有很大帮助。
【解决方案2】:

您的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())

【讨论】:

    猜你喜欢
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2020-02-18
    • 2017-01-02
    相关资源
    最近更新 更多