[英]Pythonic way to extract specific values from a dictionary based on a subset of keys
我有一組行字典,每個行字典都具有相同的鍵。 我想使用一部分鍵創建一個指針,
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”的事情
我確實找到了這個問題,但我不認為這正是我要找的東西
對於一般方法,您可能需要使用功能性工具,例如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 coll中的x的列表]
實際上,上面的代碼在功能上等效於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
嗯...
pointer = '{data[a]}-{data[g]}-{data[c]}'.format(data=mydict)
看起來至少好一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.