我需要对字典进行排序和搜索。我知道字典无法排序。但我需要以排序的格式搜索它。字典本身不需要排序。
有2个值。字符串是一个键,它与键相关联,是一个整数值。我需要根据整数得到一个排序表示。我可以用OrderedDict得到它。
但是我需要打印前50个值,而不是整个字典。我需要使用RegEx提取一些密钥。说所有以'a'开头且长度为5的键。
有人可以告诉我如何在python中以良好的格式打印?喜欢:
{'secondly': 2,
'pardon': 6,
'saves': 1,
'knelt': 1}
一行一行。谢谢你的时间。
答案 0 :(得分:3)
如果要根据整数值对字典进行排序,可以执行以下操作。
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)]
您可以使用a[:50]
限制前50名,然后使用搜索模式搜索密钥。
答案 1 :(得分:2)
有多种方法可以获得排序的字典,sorted
和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)]
要对值进行排序,而不是键,需要覆盖已排序的键函数。
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)]
答案 2 :(得分:1)
当您使用OrderedDict时,您可以通过列表理解来完成所需的操作。类似的东西:
[ value for value in d.values()[:50] if re.match('regex', value) ]
如果您需要更具体的内容,请发布您当前的代码。
对于多行漂亮打印,如果需要,请使用pprint
和可选的width
参数:
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'}
答案 3 :(得分:1)
要获得良好的格式,请查看pprint module。
如果我理解正确,OrderedDict
并不是你想要的。 OrderedDict
记住添加密钥的顺序;他们不追踪价值观。你可以使用生成器来获得你想要的东西来转换初始数据:
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]
答案 4 :(得分:1)
你可以按照他们的钥匙进行排序:
dict = {'secondly': 2,
'pardon': 6,
'saves': 1,
'knelt': 1}
for key in sorted(dict.keys()):
print dict[key]
这将根据键对输出进行排序。(在您的情况下,按字母顺序排列字符串值)
答案 5 :(得分:1)
有一些不同的工具可以帮助您:
sorted
函数采用iterable并按顺序遍历元素。所以你可以说for key, value in d.iteritems()
。filter
函数接受一个iterable和一个函数,并仅返回函数求值为True
的元素。因此,例如,filter(lambda x: your_condition(x), d.iteritems())
会为您提供一个键值元组列表,然后您可以按上述方式对其进行排序。 (在Python 3中,filter
返回一个迭代器,它甚至更好。)(value for key, value in sorted(d.iteritems()) if condition)
,这将返回迭代器。