Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.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
Python 有没有一种优雅的合并方法,通过一个公共键合并一个dict列表?_Python_Data Structures_Pydantic - Fatal编程技术网

Python 有没有一种优雅的合并方法,通过一个公共键合并一个dict列表?

Python 有没有一种优雅的合并方法,通过一个公共键合并一个dict列表?,python,data-structures,pydantic,Python,Data Structures,Pydantic,我正在寻找一种更优雅的方式,将此dict列表转换为一个合并的dict,其中键“sku”作为要合并的键。这个列表实际上是Pydantic模型,很容易转换成dicts。我没有找到使用Pydantic的更优雅的解决方案 dicts/pydanticinstances列表 [a代表m中的a] [ PackMapPydantic(id=60,pack_sku='PACKFAC01',sku='FAC01',prop_name='Facebook Username'), PackMapPydantic(id

我正在寻找一种更优雅的方式,将此dict列表转换为一个合并的dict,其中键“sku”作为要合并的键。这个列表实际上是Pydantic模型,很容易转换成dicts。我没有找到使用Pydantic的更优雅的解决方案

dicts/pydanticinstances列表

[a代表m中的a]
[
PackMapPydantic(id=60,pack_sku='PACKFAC01',sku='FAC01',prop_name='Facebook Username'),
PackMapPydantic(id=61,pack_sku='PACKFAC01',sku='FAC02',prop_name='Facebook Username'),
PackMapPydantic(id=62,pack_sku='PACKFAC01',sku='FAC03',prop_name='Facebook Username'),
PackMapPydantic(id=63,pack_sku='PACKFAC01',sku='FAC05',prop_name='Facebook Username'),
PackMapPydantic(id=64,pack_sku='PACKFAC01',sku='FAC06',prop_name='Facebook Username'),
PackMapPydantic(id=70,pack_sku='PACKFAC01',sku='FAC01',prop_name='Channel name'),
PackMapPydantic(id=71,pack_sku='PACKFAC01',sku='FAC02',prop_name='Channel name'),
PackMapPydantic(id=72,pack_sku='PACKFAC01',sku='FAC03',prop_name='Channel name'),
PackMapPydantic(id=73,pack_sku='PACKFAC01',sku='FAC05',prop_name='Channel name'),
PackMapPydantic(id=74,pack_sku='PACKFAC01',sku='FAC06',prop_name='Channel name'),
PackMapPydantic(id=87,pack_sku='PACKFAC01',sku='FAC01',道具名称=''UU uk_阿凡达(直接链接)'),
PackMapPydantic(id=88,pack_sku='PACKFAC01',sku='FAC02',道具名称=''UU uk_阿凡达(直接链接)',
PackMapPydantic(id=89,pack_sku='PACKFAC01',sku='FAC03',道具名称=''UU uk_阿凡达(直接链接)',
PackMapPydantic(id=90,pack_sku='PACKFAC01',sku='FAC06',道具名称=''UU uk_阿凡达(直接链接)')
]
期望输出:

[
{
“sku”:“FAC05”,
“道具名称”:[
“用户名”,
“频道”
]
},
{
“sku”:“FAC01”,
“道具名称”:[
“用户名”,
"频道",,
“UUK阿凡达(直接链接)”
]
},
{
“sku”:“FAC06”,
“道具名称”:[
“用户名”,
"频道",,
“UUK阿凡达(直接链接)”
]
},
{
“sku”:“FAC02”,
“道具名称”:[
“用户名”,
“UUK阿凡达(直接链接)”
]
},
{
“sku”:“FAC03”,
“道具名称”:[
“用户名”,
"频道",,
“UUK阿凡达(直接链接)”
]
}
]
当前解决方案:

对于sku中的sku\u distinct:
此_资产=[]
对于列出的项目中的项目:
如果物料['sku']==sku:
#项目=列表(项目)
此属性为资产。追加(项目['prop\u name'])
现在={'sku':sku,
'prop_name':此\u资产}
打印(现在)
使用熊猫(假设dict1是dict的初始列表)-

输出-

[{'sku': 'FAC01',
  'prop_name': ['Facebook Username',
   'Channel Name',
   '__uk_avatar {direct link}']},
 {'sku': 'FAC02',
  'prop_name': ['Facebook Username',
   'Channel Name',
   '__uk_avatar {direct link}']},
 {'sku': 'FAC03',
  'prop_name': ['Facebook Username',
   'Channel Name',
   '__uk_avatar {direct link}']},
 {'sku': 'FAC05', 'prop_name': ['Facebook Username', 'Channel Name']},
 {'sku': 'FAC06',
  'prop_name': ['Facebook Username',
   'Channel Name',
   '__uk_avatar {direct link}']}]
使用熊猫(假设dict1是dict的初始列表)-

输出-

[{'sku': 'FAC01',
  'prop_name': ['Facebook Username',
   'Channel Name',
   '__uk_avatar {direct link}']},
 {'sku': 'FAC02',
  'prop_name': ['Facebook Username',
   'Channel Name',
   '__uk_avatar {direct link}']},
 {'sku': 'FAC03',
  'prop_name': ['Facebook Username',
   'Channel Name',
   '__uk_avatar {direct link}']},
 {'sku': 'FAC05', 'prop_name': ['Facebook Username', 'Channel Name']},
 {'sku': 'FAC06',
  'prop_name': ['Facebook Username',
   'Channel Name',
   '__uk_avatar {direct link}']}]

您可以使用集合。defaultdict:

from collections import defaultdict
d = defaultdict(list)
for i in data:
  d[i.sku].append(i.prop_name)

result = [{'sku':a, 'prop_name':b} for a, b in d.items()]
输出:

[{'sku': 'FAC01', 'prop_name': ['Facebook Username', 'Channel Name', '__uk_avatar (direct link)']}, {'sku': 'FAC02', 'prop_name': ['Facebook Username', 'Channel Name', '__uk_avatar (direct link)']}, {'sku': 'FAC03', 'prop_name': ['Facebook Username', 'Channel Name', '__uk_avatar (direct link)']}, {'sku': 'FAC05', 'prop_name': ['Facebook Username', 'Channel Name']}, {'sku': 'FAC06', 'prop_name': ['Facebook Username', 'Channel Name', '__uk_avatar (direct link)']}]

您可以使用集合。defaultdict:

from collections import defaultdict
d = defaultdict(list)
for i in data:
  d[i.sku].append(i.prop_name)

result = [{'sku':a, 'prop_name':b} for a, b in d.items()]
输出:

[{'sku': 'FAC01', 'prop_name': ['Facebook Username', 'Channel Name', '__uk_avatar (direct link)']}, {'sku': 'FAC02', 'prop_name': ['Facebook Username', 'Channel Name', '__uk_avatar (direct link)']}, {'sku': 'FAC03', 'prop_name': ['Facebook Username', 'Channel Name', '__uk_avatar (direct link)']}, {'sku': 'FAC05', 'prop_name': ['Facebook Username', 'Channel Name']}, {'sku': 'FAC06', 'prop_name': ['Facebook Username', 'Channel Name', '__uk_avatar (direct link)']}]

您可以将此问题发布在上,因为您希望找到改进代码的方法。请检查此项以了解这些平台之间的差异。您可以将此问题发布在上,因为您希望找到改进代码的方法。请检查此项以了解这些平台之间的差异。