Элегантный способ превратить список диктата в диктат диктата - PullRequest
7 голосов
/ 29 ноября 2011

У меня есть список словарей, как в этом примере:

listofdict = [{'name': 'Foo', 'two': 'Baz', 'one': 'Bar'}, {'name': 'FooFoo', 'two': 'BazBaz', 'one': 'BarBar'}]

Я знаю, что «имя» существует в каждом словаре (а также в других ключах) и уникально и не встречается ни в одном из других словарей в списке.

Я хотел бы получить хороший способ получить доступ к значениям 'two' и 'one', используя ключ 'name'. Я думаю, словарь словарей будет наиболее удобным? Как:

{'Foo': {'two': 'Baz', 'one': 'Bar'}, 'FooFoo': {'two': 'BazBaz', 'one': 'BarBar'}}

Имея эту структуру, я могу легко перебирать имена, а также получать другие данные, используя имя в качестве ключа. У вас есть другие предложения по структуре данных?

Мой главный вопрос: какой самый хороший и самый питонский способ сделать это преобразование?

Ответы [ 2 ]

14 голосов
/ 29 ноября 2011
d = {}
for i in listofdict:
   d[i.pop('name')] = i

если у вас есть Python2.7 +:

{i.pop('name'): i for i in listofdict}
5 голосов
/ 29 ноября 2011
dict((d['name'], d) for d in listofdict)

является самым простым, если вы не возражаете против того, чтобы клавиша name оставалась в dict.

Если вы хотите удалить name s, вы все равно можете легко сделать это в одной строке:

dict(zip([d.pop('name') for d in listofdict], listofdict))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...