2012-02-29 22 views
3

我有一個情況我得到恢復的MongoDB從這樣的價值觀:Python的方式做一個鍵/值對的字典

{'value': Decimal('9.99'), 'key': u'price'} 
{'value': u'1.1.1', 'key': u'version'} 

現在,我想出了幾個方法可以做到這一點,像(雖然我更模糊的人之一):

y[x['key']] = x['value'] 

,但我只是有這個嘮叨的懷疑,有一個單一的或內置的方法,將清理小組合起來。

+8

我認爲'y [x ['key']] = x ['value']'非常簡潔易讀。 – NPE 2012-02-29 21:07:27

+1

我與aix。我認爲這是避免過度考慮問題的絕好機會。 – 2012-02-29 21:10:13

+0

哈哈,你可能是對的 - 不是我第一次需要某人提醒我。謝謝 – NFicano 2012-02-29 21:23:10

回答

3

的一種方法是用operator.itemgetter

>>> from operator import itemgetter 
>>> lst = [{'value': 9.99, 'key': 'price'}, {'value': '1.1.1', 'key': 'version'}] 
>>> 
>>> getter = itemgetter('key','value') 
>>> dict(getter(dct) for dct in lst) 
{'price': 9.99, 'version': '1.1.1'} 

或者使用map()/imap()gnibbler建議:

>>> dict(map(getter, lst)) 
{'price': 9.99, 'version': '1.1.1'} 
+1

或'dict(map(getter,lst))'。你可以使用'imap' for Python2 – 2012-02-29 21:40:31

+0

@gnibbler:謝謝!我比其他人更喜歡這種方式,所以我在回答中更新了它:) – 2012-02-29 21:54:55

+0

這正是我一直在尋找的!這足夠優雅,我會完全處理一個額外的進口。謝謝! – NFicano 2012-03-01 21:46:28

5

喜歡的東西:

d = dict((x['key'], x['value']) for x in values) 

假設這些值是在某種iterateable的。

有關更多信息,請參閱documentation

6

在Python 2.7+,您可以使用字典解析:

In [2]: l = [{'value': Decimal('9.99'), 'key': u'price'}, {'value': u'1.1.1', 'key': u'version'}] 

In [5]: {x['key']: x['value'] for x in l} 
Out[5]: {u'price': Decimal('9.99'), u'version': u'1.1.1'} 
相關問題