我有一個情況我得到恢復的MongoDB從這樣的價值觀:Python的方式做一個鍵/值對的字典
{'value': Decimal('9.99'), 'key': u'price'}
{'value': u'1.1.1', 'key': u'version'}
現在,我想出了幾個方法可以做到這一點,像(雖然我更模糊的人之一):
y[x['key']] = x['value']
,但我只是有這個嘮叨的懷疑,有一個單一的或內置的方法,將清理小組合起來。
我有一個情況我得到恢復的MongoDB從這樣的價值觀:Python的方式做一個鍵/值對的字典
{'value': Decimal('9.99'), 'key': u'price'}
{'value': u'1.1.1', 'key': u'version'}
現在,我想出了幾個方法可以做到這一點,像(雖然我更模糊的人之一):
y[x['key']] = x['value']
,但我只是有這個嘮叨的懷疑,有一個單一的或內置的方法,將清理小組合起來。
的一種方法是用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'}
>>> dict(map(getter, lst))
{'price': 9.99, 'version': '1.1.1'}
或'dict(map(getter,lst))'。你可以使用'imap' for Python2 – 2012-02-29 21:40:31
@gnibbler:謝謝!我比其他人更喜歡這種方式,所以我在回答中更新了它:) – 2012-02-29 21:54:55
這正是我一直在尋找的!這足夠優雅,我會完全處理一個額外的進口。謝謝! – NFicano 2012-03-01 21:46:28
喜歡的東西:
d = dict((x['key'], x['value']) for x in values)
假設這些值是在某種iterateable的。
有關更多信息,請參閱documentation。
在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'}
我認爲'y [x ['key']] = x ['value']'非常簡潔易讀。 – NPE 2012-02-29 21:07:27
我與aix。我認爲這是避免過度考慮問題的絕好機會。 – 2012-02-29 21:10:13
哈哈,你可能是對的 - 不是我第一次需要某人提醒我。謝謝 – NFicano 2012-02-29 21:23:10