Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将两个元组列表合并为一个dict列表的python方法_Python_List_Dictionary_Merge - Fatal编程技术网

将两个元组列表合并为一个dict列表的python方法

将两个元组列表合并为一个dict列表的python方法,python,list,dictionary,merge,Python,List,Dictionary,Merge,嗨,我对Python很陌生,所以我还不太了解所有的小技巧和快捷方式。我有两个多维数组: >>> colorStrings [('0', '2371_9890_020'), ('1', '2371_9031_100'), ('2', '2371_9890_464')] 及 基本上,我希望将这些对象合并到字典对象数组中。比如: [ { 'colorString': '2371_9890_020' 'skus': ('0017651670', '0017651688',

嗨,我对Python很陌生,所以我还不太了解所有的小技巧和快捷方式。我有两个多维数组:

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

基本上,我希望将这些对象合并到字典对象数组中。比如:

[
{
   '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')
}
]
是否有一些kewl-Pythonic的方法可以使用Lamba表达式或一些巧妙的方法轻松地实现这一点?谢谢

首先使用按sku_id对sku进行分组,然后使用列表理解生成组合数据集

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]
试试这个:

 result = [
     {
         'colorString' : color, 
         'skus' : [value for key, value in skus if key is colorkey]
     } for colorkey, color in colorStrings 
 ]

好吧,这很好用-现在要弄清楚它为什么有效:)决定把这个作为答案,因为我喜欢它。。虽然defauldict()方法也可以很好地工作..但这可能是非常低效的,因为它必须每次对colorStringsYea中的每个条目迭代
colorKey
,我也注意到了--但是,我的两个列表总是非常小。。每件大概不到10件。而且这段代码的性能并不重要。模块itertools中的groupby也可以提供帮助!
 result = [
     {
         'colorString' : color, 
         'skus' : [value for key, value in skus if key is colorkey]
     } for colorkey, color in colorStrings 
 ]