Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何返回字典中的第一个最高值_Python_String_Dictionary - Fatal编程技术网

Python 如何返回字典中的第一个最高值

Python 如何返回字典中的第一个最高值,python,string,dictionary,Python,String,Dictionary,从输入'joshin josh' 我非常确定字典的max值返回h,因为它是字典中第一个值最高的值,即使是并列的。 我希望它返回j,因为这是我放入词典的第一个字母。这本字典似乎自动按字母顺序排列字母,我也不懂。我想让它适用于任何字符串和所有绑定的字母,而不仅仅是这个特殊的字符串。如果我在任何事情上错了,请纠正我,我是一个傻瓜。您可以使用OrderedDict 只要一个简单的改变就能解决你的问题 {'i': 1, 'h': 2, 'j': 2, 'o': 2, 'n': 1, 's': 2} 所以

从输入
'joshin josh'

我非常确定字典的max值返回h,因为它是字典中第一个值最高的值,即使是并列的。
我希望它返回j,因为这是我放入词典的第一个字母。这本字典似乎自动按字母顺序排列字母,我也不懂。我想让它适用于任何字符串和所有绑定的字母,而不仅仅是这个特殊的字符串。如果我在任何事情上错了,请纠正我,我是一个傻瓜。

您可以使用
OrderedDict

只要一个简单的改变就能解决你的问题

{'i': 1, 'h': 2, 'j': 2, 'o': 2, 'n': 1, 's': 2}
所以你可以用

ord_dic = OrderedDict(sorted(dic.items(), key=lambda t: str_in.index(t[0])))

如果不想手动计数,可以使用Python计算字母出现次数,找到最大值,然后返回字符串中与该计数匹配的第一个字母:

from collections import OrderedDict
next(如果字母计数为c,则c代表字符串中的c[c]==max\u count)
返回给定字符串中计数为最大计数的第一个字母

一种更为优化的方法

前面的方法将让您在最坏的情况下遍历字符串三次。对于一次传递方法,在遍历字符串时只跟踪最大计数和对应的字母是最有效的:

from collections import Counter

string = 'joshin josh'
counts = Counter(string)
max_count = max(counts.values())
print(next(c for c in string if counts[c] == max_count))  # j

另一种方法是,通过使用
OrderedDict
作为mixin类,它允许轻松组合有序的
计数器
类。然后,您可以使用从
most\u common
方法返回的列表的第一个条目

e、 g

将返回字母的元组和出现次数。e、 g

('j',2)

在传递空字符串的情况下,您需要保护
[0]
,在这种情况下,没有什么是最常见的


为了更好地理解这一点,我建议观看《PyCon 2015》中的Raymond Hettingers Super Severed Super talk。Youtube链接

使用OrderedDict或等待python 3.6按默认顺序排序要解释@Boud的评论,普通python字典本质上没有顺序-如果顺序很重要,您需要不同的数据结构,比如@Boud-Dicts将在python 3.6中排序@李纳斯:太酷了,@ajcr-谢谢你的链接!在你发布之前我尝试过这个,之后,我得到一个错误:全局名称“OrderedDict”没有定义。我必须导入一个库才能使用它吗?非常感谢你,希望你的答案可能会帮助其他人!这个答案根本不需要
OrderedDict
。有序的dict很可能被一个列表所取代。
from collections import OrderedDict
from collections import Counter

string = 'joshin josh'
counts = Counter(string)
max_count = max(counts.values())
print(next(c for c in string if counts[c] == max_count))  # j
from collections import defaultdict

counts = defaultdict(int)
max_letter = None
max_count = 0
string = 'joshin josh'
for c in string:
    counts[c] += 1
    if counts[c] > max_count:
        max_letter = c
        max_count = counts[c]

print(max_letter)  # j
from collections import Counter, OrderedDict

class OrderedCounter(Counter, OrderedDict):
    pass

oc = OrderedCounter('joshin josh')
print(oc.most_common()[0])