我有一个字符串......
my_string="The way you see people is the way you treat them and the Way you treat them is what they become"
我的def应该返回:
{2: ['is'],
3: ['and', 'see', 'the', 'way', 'you'],
4: ['them', 'they', 'what'],
5: ['treat'],
6: ['become', 'people']}
我的解决方案返回:
{3: {'you', 'see', 'way', 'and', 'the'},
6: {'become', 'people'},
2: {'is'},
5: {'treat'},
4: {'what', 'them', 'they'}}
我需要按键对字典进行排序并更改值的类...我的值类是{}但是我想要[] 我的解决方案:
def n_letter_dictionary(my_string):
my_string=my_string.lower().split()
sample_dictionary={}
r=[]
for word in my_string:
lw=len(word)
if lw in sample_dictionary:
sample_dictionary[lw].add(word)
else:
sample_dictionary[lw] = {word}
return sample_dictionary
print(n_letter_dictionary("The way you see people is the way you treat them
and the Way you treat them is what they become"))
我怎么能这样做?任何人都可以帮忙吗?
答案 0 :(得分:1)
你有套装,因为你在这里创建了一套:
sample_dictionary[lw] = {word}
你需要在那里列出一个清单:
sample_dictionary[lw] = [word]
并使用.append()
,而非.add()
添加更多元素。
请注意,使用dict.setdefault()
:
def n_letter_dictionary(my_string):
sample_dictionary = {}
for word in my_string.lower().split():
sample_dictionary.set_default(len(word), []).append(word)
return sample_dictionary
.setdefault()
返回给定键的值;如果密钥丢失,则首先将该密钥设置为第二个参数中提供的默认值。
如果您只想保留唯一的字词,则必须在事件之后使用额外的循环将集合转换为列表:
def n_letter_dictionary(my_string):
sample_dictionary = {}
for word in my_string.lower().split():
sample_dictionary.set_default(len(word), set()).add(word)
return {l: list(v) for l, v in sample_dictionary.items()}
最后一行是字典理解;它使用相同的键构建一个新的字典,并将每个set
值转换为一个列表。请注意,集合是无序的,因此结果列表将按任意顺序列出唯一字。如果您需要保留输入中单词的顺序,那么您已将这些单词收集到列表中,然后将How do you remove duplicates from a list in whilst preserving order?中的技术应用于每个值。
字典也是无序的,就像集合一样,并且无法排序。有关解决方法,请参阅How can I sort a dictionary by key?。
例如,您可以从已排序的(key, value)
对中生成OrderedDict()
instance:
from collections import OrderedDict
def n_letter_dictionary(my_string):
sample_dictionary = {}
for word in my_string.lower().split():
sample_dictionary.set_default(len(word), set()).add(word)
return OrderedDict((l, list(v)) for l, v in sorted(sample_dictionary.items()))
答案 1 :(得分:0)
默认情况下,在python<中,Dicts是无序的3.7。你可以做的是使用OrderedDict。它保留了数据插入的顺序,如果您插入已排序的数据,它将保持排序。
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">Type
<span class="caret"></span></button>
<ul class="dropdown-menu">
<li><button>login</button></li>
<li><a>password</a></li>
</ul>
</div>
<input class="form-control" name="type" placeholder="value" ng-model="value">
答案 2 :(得分:0)
您还可以使用集合中的Counter()来解决此问题。它会让你的生活更轻松。
import collections
c = collections.Counter(mystring.lower().split(' '))
for key in sorted([*c]):
print("{0} : {1}".format(key, c[key]))