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