Pythonic способ объединить два списка кортежей в один список dict - PullRequest
8 голосов
/ 29 апреля 2011

Привет, я довольно новичок в Python, поэтому я пока не знаю всех маленьких хитростей и ярлыков. У меня есть два многомерных массива:

>>> colorStrings
[('0', '2371_9890_020'), ('1', '2371_9031_100'), ('2', '2371_9890_464')]

и

>>> skus
[('0', '0017651670'), ('0', '0017651688'), ('0', '0017651696'), ('0', '0017651704'), ('0', '0017651712'), ('0', '0017651720'), ('0', '0017651738'), ('1', '0017650896'), ('1', '0017650904'), ('1', '0017650912'), ('1', '0017650920'), ('1', '0017650938'), ('1', '0017650946'), ('1', '0017650953'), ('2', '0017651746'), ('2', '0017651753'), ('2', '0017651761'), ('2', '0017651779'), ('2', '0017651787'), ('2', '0017651795'), ('2', '0017651803')]

По сути, я хочу объединить их в массив объектов словаря. Что-то вроде:

[
{
   'colorString': '2371_9890_020'
   'skus': ('0017651670', '0017651688', '0017651696', '0017651704', '0017651712', '0017651720, '0017651738')
},

{
   'colorString': '2371_9031_100'
   'skus': ('0017650896', '0017650904', '0017650912', '0017650920', '0017650938', '0017650946, '0017650953')
},

{
   'colorString': '2371_9890_464'
   'skus': ('0017651746', '0017651753', '0017651761', '0017651779', '0017651787', '0017651795, '0017651803')
}
]

Есть ли какой-то странный способ Pythonic сделать это действительно легко с помощью выражений Lamba или какой-то ловкости? Спасибо!

Ответы [ 3 ]

10 голосов
/ 29 апреля 2011

попробуйте это:

 result = [
     {
         'colorString' : color, 
         'skus' : [value for key, value in skus if key is colorkey]
     } for colorkey, color in colorStrings 
 ]
9 голосов
/ 29 апреля 2011

Используйте defaultdict, чтобы сначала сгруппировать skus по sku_id, а затем использовать списки для создания объединенного набора данных

from collections import defaultdict

sku_dict = defaultdict(list)
for color_id, sku in skus:
    sku_dict[color_id].append(sku)

combined = [dict(colorString=color, skus=sku_dict.get(color_id)) for color_id, color in colorStrings]
0 голосов
/ 29 апреля 2011
dict(d1, **d2)

См. Этот связанный вопрос Как мне объединить слова вместе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...