Преобразовать список диктов в строку - PullRequest
7 голосов
/ 10 марта 2011

Я очень плохо знаком с Python, поэтому простите меня, если это проще, чем мне кажется.

Мне предлагают список диктовок следующим образом:

[{'directMember': 'true', 'memberType': 'User', 'memberId': 'address1@example.com'},  
 {'directMember': 'true', 'memberType': 'User', 'memberId': 'address2@example.com'},  
 {'directMember': 'true', 'memberType': 'User', 'memberId': 'address3@example.com'}]

Я хотел бы сгенерировать простую строку memberIds, такую ​​как

address1@example.com, address2@example.com, address3@example.com

но каждый метод преобразования списка в строку, которую я пробовал, терпит неудачу, потому что в этом участвует диктовка.

Любой совет?

Ответы [ 3 ]

14 голосов
/ 10 марта 2011
', '.join(d['memberId'] for d in my_list)

Поскольку вы сказали, что вы новичок в Python, я объясню, как это работает.

Метод str.join() объединяет каждый элемент итерируемого (например, список) и использует строку, к которой вызывается метод, в качестве разделителя.

Итерация, предоставляемая методу, является выражением генератора (d['memberId'] for d in my_list).По сути, это дает вам каждый элемент, который будет в списке, созданном списком [d['memberId'] for d in my_list] без фактического создания списка.

5 голосов
/ 10 марта 2011

Эти однострочники в порядке, но новичок может не получить их.Здесь они разбиты:

list_of_dicts = (the list you posted)

Хорошо, у нас есть список, и каждый его член является диктатом.Вот это list comprehension:

[expr for d in list_of_dicts]

Это все равно что сказать for d in list_of_dicts ....expr оценивается для каждого d и генерируется новый список.Вы также можете выбрать только некоторые из них с помощью if, см. Документы.

Итак, что нам нужно expr?В каждом диктовке d мы хотим, чтобы значение соответствовало ключу 'memberId'.Это d['memberId'].Итак, теперь понимание списка:

[d['memberId'] for d in list_of_dicts]

Это дает нам список адресов электронной почты, теперь, чтобы сложить их вместе с запятыми, мы используем join (см. Документы):

', '.join([d['memberId'] for d in list_of_dicts])

Я вижу, что другие постеры не включили [] в список аргументов join, и это работает.Приходится искать это, я не знаю, почему ты можешь это оставить.НТН.

1 голос
/ 10 марта 2011

Доступ к диктовке.

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