繁体   English   中英

在python字典中编辑值

[英]Editing values in python dictionary

我有一个超过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]]

然后我得到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]]

但我得到“索引超出范围”错误消​​息。

如果使用相同的索引,则使用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')

所以

from operator import itemgetter
ig = itemgetter(*indices)
for k, v in dict_gtps.iteritems():
    print ig(v)
    abs_new[k] = ig(v)

你也可以使用字典理解

abs_new = {k:ig(v) for k,v in dict_gtps.iteritems()}

假设我正确阅读了您的要求,您可以尝试:

for key, value in dict_gtps.iteritems():
  abs_new[key] = [value[i] for i in indices]

您的示例代码存在缺陷,indices和long_val的值相反。

 indices = [1,3,5,7,9]
 long_val = ['a','b','c','d','e','f','g','h','i','j','k']
 for each in xrange(len(long_val)):
    print indices[long_val[each]]

抛出TypeError 它应该是:

indices = [1,3,5,7,9]
long_val = ['a','b','c','d','e','f','g','h','i','j','k']
for each in xrange(len(indices)):
    print long_val[indices[each]] 

基于此,很明显为什么你的字典函数会抛出一个范围错误,你输入错误的变量。 我会让你自己尝试修复代码。

/编辑后代另外,因为索引中的值是整数,所以实际上你不需要使用xrange--

for i in indices:
    print long_val[i]

更简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM