Pythonic方法基于键的子集从字典中提取特定值

时间:2014-06-17 17:20:53

标签: python python-2.7 dictionary

我有一组行字典,每个字典都有相同的键。我想使用键的子集创建指针

mydict = {'g':'1','a':'2','r':'3','c':'24','b':'38'}

指针可能使用'a','g'和'c'

的值
pointer = '-'.join([mydict['a'],mydict['g'],mydict['c']])

所以指针看起来像:

2-1-24

是否有更通用的方法来完成从特定顺序中的字典中提取值

在我写这篇文章时,我想知道它是否应该在代码审查中,因为我可以清楚地完成我的目标,但这段代码不是非常可重复使用我想做更多的事情'Pythonic'

我确实找到了question,但我认为这不是我想要的

2 个答案:

答案 0 :(得分:3)

对于一般方法,您可以查看功能工具,例如map

mydict = {'g':'1','a':'2','r':'3','c':'24','b':'38'}
keys = ['a', 'g', 'c']
results = map(mydict.__getitem__, keys)
pointer = '-'.join(results)

(显然结果部分可以内联到连接中,但这感觉更清晰)

在Python中,'索引运算符'[]通过调用集合的__getitem__方法来工作(是的,这确实意味着如果使用名为__getitem__的方法定义类,则可以使用方括号来索引它)。 map函数接受一个函数参数和一个集合,并返回一个等于[f(x)for x in coll]的列表

实际上,上面的代码在功能上等同于results = [mydict[x] for x in keys],但最后我查看map的速度更快。

>>> def t1():  
...  mydict = {'g':'1','a':'2','r':'3','c':'24','b':'38'}  
...  keys = ['a', 'g', 'c']  
...  results = map(mydict.`__getitem__`, keys)  
...  
>>> def t2():  
...  mydict = {'g':'1','a':'2','r':'3','c':'24','b':'38'}  
...  keys = ['a', 'g', 'c']  
...  results = [mydict[x] for x in keys]  
...  
`>>>` timeit.timeit(t1, number = 100000)  
0.061136093994718976  
`>>>` timeit.timeit(t1, number = 100000)  
0.05009100399911404  
`>>>` timeit.timeit(t2, number = 100000)  
0.06633162200159859  
`>>>` timeit.timeit(t2, number = 100000)  
0.06771555900922976  

答案 1 :(得分:1)

嗯...

pointer = '{data[a]}-{data[g]}-{data[c]}'.format(data=mydict)

看起来好一点,至少。