【问题标题】:Pythonic way to merge two List of tuples into single list of dict将两个元组列表合并为单个dict列表的Pythonic方法
【发布时间】:2011-08-15 06:55:34
【问题描述】:

您好,我对 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')
}
]

有没有一些 kewl Pythonic 方式可以很容易地使用 Lamba 表达式或一些巧妙的方法来做到这一点?谢谢!

【问题讨论】:

  • 来自模块 itertools 的 groupby 也可以提供帮助!

标签: python list dictionary merge


【解决方案1】:

先使用defaultdict按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]

【讨论】:

  • 效果很好——现在来弄清楚它为什么有效:)
【解决方案2】:

试试这个:

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

【讨论】:

  • 决定将其标记为答案只是因为我喜欢它.. 虽然 defauldict() 方法也很好用..
  • 这可能是非常低效的,因为它必须每次为 colorStrings 中的每个条目迭代 colorKey
  • 是的,我也注意到了这一点——但是,我的两个列表总是很小。每个可能不到 10 个项目。而且这段代码并不关键..
猜你喜欢
  • 2019-01-25
  • 2020-02-19
  • 2019-02-05
  • 2011-01-28
  • 2019-09-03
  • 2015-07-15
  • 2014-01-27
相关资源
最近更新 更多