bra*_*n85 3 python indexing dictionary extraction
我有一个超过1000个密钥的大字典,每个值超过600 000 int long.现在,我需要提取一些这些整数,所以从60万我想去说5k.但它不能随机5k,它们必须处于非常具体的位置.由于5k仍然有点太大而无法手工提取,我需要使用一个索引列表来指示值中应该取出哪些整数.我测试了小列表上的提取,索引[1,3,5,7,9]和long_val ['a','b','c','d','e','f','g ','h','我','j','k']然后我可以这样做:
for each in xrange(len(long_val)):
print indices[long_val[each]]
Run Code Online (Sandbox Code Playgroud)
然后我得到b,d,f,h和j(根据需要).
现在,处理字典(其中long_val被实际字典值替换)并不那么简单.我试过了:
for keys,values in dict_gtps.iteritems():
for each in xrange(len(values)):
abs_new[keys]=pos_3[values[each]]
Run Code Online (Sandbox Code Playgroud)
但我得到"索引超出范围"错误消息.
如果使用相同的索引,则使用效率会更高 itemgetter(*indices)
>>> from operator import itemgetter
>>> indices = [1,3,5,7,9]
>>> long_val = ['a','b','c','d','e','f','g','h','i','j','k']
>>> ig = itemgetter(*indices)
>>> ig(long_val)
('b', 'd', 'f', 'h', 'j')
Run Code Online (Sandbox Code Playgroud)
所以
from operator import itemgetter
ig = itemgetter(*indices)
for k, v in dict_gtps.iteritems():
print ig(v)
abs_new[k] = ig(v)
Run Code Online (Sandbox Code Playgroud)
你也可以使用字典理解
abs_new = {k:ig(v) for k,v in dict_gtps.iteritems()}
Run Code Online (Sandbox Code Playgroud)