我有一组行字典,每个字典都有相同的键。我想使用键的子集创建指针
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,但我认为这不是我想要的
答案 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)
看起来好一点,至少。