我想知道是否有人知道通过特定单词的拼写来制作字典的方法?由于字典是未分类的,我使用了OrderedDict,但我相信你只能通过键和值对它进行排序。知道如何以这种方式订购吗?
这是我正在进行的项目的一部分:
word = input("word")
list_1 = list(word)
word>? apple
len_list_1 = len(list_1)
dict = {}
for x in range(0, len(list_1)):
dict[list_1[x]] = list_1.count(list_1[x])
print(dict)
>{'l': 1, 'p': 2, 'a': 1, 'e': 1}
我试图按照' apple'这个词的顺序保留它。然后以某种方式将字典转换为纯文本:
{'a' : 1, 'p': 2, 'l': 1, 'e': 1}
> a1p2l1e1 #as my final answer
答案 0 :(得分:3)
首先,请注意您的代码是一种非常低效且简单的方式,可以非常简单地执行某些操作:
>>> from collections import Counter
>>> Counter('apple')
Counter({'p': 2, 'a': 1, 'e': 1, 'l': 1})
(效率不高,因为你每次都在计算每一封信,例如' aaaaa'会计算5次; unpythonic,因为你声明并且没有使用使用range(len(...))
进行长度变量和循环抛出,这几乎不是一个好主意。)
然后,您可以对此计数器进行排序,并将其设为OrderedDict
。我按照单词中的第一个出现排序:
>>> word = 'apple'
>>> c = Counter(word)
>>> OrderedDict(sorted(c.items(), key=lambda x: word.index(x[0])))
OrderedDict([('a', 1), ('p', 2), ('l', 1), ('e', 1)])
请注意,如果您只是对字母进行分组,答案将会大不相同:如果您想要执行'b1o1b1'
之类的操作,则字典不是正确的数据结构。
如果您想要的输出只是字符串'a1p2l1e1'
,您可以执行以下操作:
>>> word = 'apple'
>>> c = Counter(word)
>>> sorted_letter_counts = sorted(c.items(), key=lambda x: word.index(x[0]))
>>> ''.join(c + str(n) for c,n in sorted_letter_counts)
'a1p2l1e1'
或者作为一个单行:
>>> word = 'apple'
>>> ''.join(c + str(n) for c,n in sorted(Counter('apple').items(), key=lambda x: word.index(x[0])))
'a1p2l1e1'
答案 1 :(得分:0)
class OrderedCounter(collections.Counter, collections.OrderedDict):
'Counter that remembers the order elements are first encountered'
def __repr__(self):
return '%s(%r)' % (self.__class__.__name__, collections.OrderedDict(self))
def __reduce__(self):
'''__reduce__ is for pickling'''
return self.__class__, (collections.OrderedDict(self),)
用法:
>>> foo = OrderedCounter('apple')
>>> foo
OrderedCounter(OrderedDict([('a', 1), ('p', 2), ('l', 1), ('e', 1)]))
>>>
>>> for thing in foo.items():
print(thing)
('a', 1)
('p', 2)
('l', 1)
('e', 1)
>>>