gpt4 book ai didi

python - 按值对字典进行排序

转载 作者:行者123 更新时间:2023-11-30 23:43:57 26 4
gpt4 key购买 nike

我从一堆或电子邮件中读取数据并计算每个单词的频率。首先构造两个计数器:

counters.stats = collections.defaultdict(dict)
counters.chi = collections.counter()

统计的关键是词。对于每个单词,我构建一个字典,其键是电子邮件的名称,值是该单词在该电子邮件中的频率。

“气”的关键与统计中的单词相同。我想按“chi”中的键对“stats”中的键进行排序。问题已通过以下方式解决:

def print_stats(counters):
sorted_key = sorted(counters.stats, key = counters.chi.get)
result = collections.OrderedDict(k, counters.stats[k] for key in sorted_key)
for form, cat_to_stats in result.items():

最佳答案

如果我理解正确,这应该可以满足您的要求:

>>> stats = {'a':   {'email1':4, 'email2':3}, 
... 'the': {'email1':2, 'email3':4},
... 'or': {'email1':2, 'email3':1}}
>>> chi = {'a': 7, 'the':6, 'or':3}
>>> sorted(stats, key=chi.get)
['or', 'the', 'a']

请告诉我这是否适合您。另外,正如 Boud 上面提到的,您应该考虑 numpy/scipy,它可能会提供更好的性能 - 并且肯定会提供大量内置功能。<​​/p >

既然你说这不起作用——出于你尚未解释的原因——这里有一个更通用的示例,说明如何使用 key 参数。这表明 get 可以与 Counter 对象以及标准字典一起使用,还可以显示如何创建执行某些操作的函数:

>>> stats = {'a':   {'email1':4, 'email2':3}, 
... 'the': {'email1':2, 'email3':4},
... 'or': {'email1':2, 'email3':1}}
>>> wordlists = ([k] * sum(d.itervalues()) for k, d in stats.iteritems())
>>> chi = collections.Counter(word for seq in wordlists for word in seq)
>>> sorted(stats, key=chi.get)
['or', 'the', 'a']
>>> sorted(stats, key=lambda x: chi[x] + 3)
['or', 'the', 'a']
>>> sorted(stats, key=chi.get, reverse=True)
['a', 'the', 'or']

我仍然不完全理解你在寻找什么,但也许你的意思是获得键、值元组的排序列表?

>>> sorted(stats.iteritems(), key=lambda x: chi[x[0]])
[('or', {'email3': 1, 'email1': 2}),
('the', {'email3': 4, 'email1': 2}),
('a', {'email2': 3, 'email1': 4})]

我实际上建议将其分开:

>>>> sorted_keys = sorted(stats, key=chi.get)
>>>> [(k, stats[k]) for k in sorted_keys]
[('or', {'email3': 1, 'email1': 2}), ('the', {'email3': 4, 'email1': 2}), ('a', {'email2': 3, 'email1': 4})]

您说您想要按 chi 中的值排序的内容,但“具有与统计信息相同的结构”。这是不可能的,因为字典没有顺序;最接近的是元组的排序列表,或 OrderedDict (在 2.7+ 中)。

>>>> collections.OrderedDict((k, stats[k]) for k in sorted_keys)
OrderedDict([('or', {'email3': 1, 'email1': 2}), ('the', {'email3': 4, 'email1': 2}), ('a', {'email2': 3, 'email1': 4})])

如果你必须经常对字典重新排序,这个方法就有点没有意义了。

关于python - 按值对字典进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10463442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com