Python中的字典搜索和排序

Python中的字典搜索和排序,python,dictionary,Python,Dictionary,我需要在字典里分类和查找。我知道那本字典无法分类。但我所需要做的就是以排序的格式搜索它。字典本身不需要排序 有两个值。字符串是一个整数值,它是一个键并与该键关联。我需要得到一个基于整数的排序表示。我可以通过订购的信息技术得到 但是我需要打印前50个值,而不是整本字典。我需要用正则表达式提取一些密钥。说出所有以“a”开头、长度为5的键 有人能告诉我如何用python以良好的格式打印吗?比如: {'secondly': 2, 'pardon': 6, 'saves': 1, 'knelt':

我需要在字典里分类和查找。我知道那本字典无法分类。但我所需要做的就是以排序的格式搜索它。字典本身不需要排序

有两个值。字符串是一个整数值,它是一个键并与该键关联。我需要得到一个基于整数的排序表示。我可以通过订购的信息技术得到

但是我需要打印前50个值,而不是整本字典。我需要用正则表达式提取一些密钥。说出所有以“a”开头、长度为5的键

有人能告诉我如何用python以良好的格式打印吗?比如:

{'secondly': 2, 
'pardon': 6, 
'saves': 1, 
'knelt': 1}

没有一条线。谢谢您的时间。

由于您已经在使用OrderedICT,您可能可以通过列表理解来完成所需的工作。比如:

[ value for value in d.values()[:50] if re.match('regex', value) ]
如果您需要更具体的信息,请发布您当前的代码

对于多行打印,如果需要,可使用带可选
宽度
参数的
pprint

In [1]: import pprint
In [2]: d = {'a': 'a', 'b': 'b' }
In [4]: pprint.pprint(d)
{'a': 'a', 'b': 'b'}
In [6]: pprint.pprint(d,width=20)
{'a': 'a',
 'b': 'b'}

如果要根据整数值对字典排序,可以执行以下操作

d = {'secondly': 2, 'pardon': 6, 'saves': 1, 'knelt': 1}
a = sorted(d.iteritems(), key=lambda x:x[1], reverse=True)
a
将包含元组列表:

[('pardon', 6), ('secondly', 2), ('saves', 1), ('knelt', 1)]

您可以使用[code>a[:50]
将其限制为前50名,然后使用您的搜索模式搜索各个键。

要获得良好的格式,请查看

如果我理解正确的话,
OrderedDict
并不是您真正想要的
OrderedDict
s记住添加键的顺序;他们不跟踪价值观。您可以使用生成器转换初始数据来获得所需的内容:

import re, operator
thedict = {'secondly':2, 'pardon':6, ....}
pat = re.compile('^a....$') # or whatever
top50 = sorted(((k,v) for (k,v) in thedict.iteritems() if pat.match(k)), reverse=True, key=operator.itemgetter(1))[:50]

您可以对dicionary的键进行排序:

dict = {'secondly': 2, 
        'pardon': 6, 
        'saves': 1, 
        'knelt': 1}

for key in sorted(dict.keys()): 
    print dict[key]

这将根据键对输出进行排序。(在您的示例中,字符串值按字母顺序排列)

有一些不同的工具可以帮助您:

  • sorted
    函数接受一个iterable并按顺序遍历元素。因此,您可以对d.iteritems()中的键、值说类似于
  • filter
    函数接受一个iterable和一个函数,并仅返回该函数计算结果为
    True
    的元素。因此,例如,
    filter(lambda x:your_condition(x),d.iteritems())
    将为您提供一个键值元组列表,然后您可以按上述方式对其进行排序。(在Python3中,
    filter
    返回一个迭代器,这更好。)
  • 生成器表达式允许您将上述所有内容合并为一个表达式。例如,如果您只关心值,那么可以编写
    (键的值,排序的值(d.iteritems())if condition)
    ,这将返回一个迭代器

有很多方法可以获得排序的dict,
排序的
iteritems()
是你的朋友

data = {'secondly': 2, 'pardon': 6, 'saves': 1, 'knelt': 1}
我最常用的模式是:

key = sorted(data.iteritems())
print key   #[('knelt', 1), ('pardon', 6), ('saves', 1), ('secondly', 2)]

key_desc = sorted(data.iteritems(), reverse=True)
print key_desc #[('secondly', 2), ('saves', 1), ('pardon', 6), ('knelt', 1)]
要根据值而不是键进行排序,需要覆盖sorted的键函数

value = sorted(data.iteritems(), key=lambda x:x[1])
print value #[('saves', 1), ('knelt', 1), ('secondly', 2), ('pardon', 6)]

value_desc = sorted(data.iteritems(),key=lambda x:x[1], reverse=True)
print value_desc #[('pardon', 6), ('secondly', 2), ('saves', 1), ('knelt', 1)]
您可以使用跨多行漂亮地打印词典。