簡體   English   中英

基於鍵子集的從字典中提取特定值的Python方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM