Python 创建唯一目录列表的优化方法

Python 创建唯一目录列表的优化方法,python,Python,因此,我需要一种在python中创建dict列表的最佳方法 因此,我有一个如下列表: [ {'name':'John','cabiods':['Reading','sweeling']}, {'name':'Gina','cabiods':['sling','Cooking']}, {'name':'John','爱好':['Gardening','游泳]] ] 所以我需要输出如下: [ {'name':'John','cabiods':['Reading','sweering','Garde

因此,我需要一种在python中创建dict列表的最佳方法

因此,我有一个如下列表:

[
{'name':'John','cabiods':['Reading','sweeling']},
{'name':'Gina','cabiods':['sling','Cooking']},
{'name':'John','爱好':['Gardening','游泳]]
]
所以我需要输出如下:

[
{'name':'John','cabiods':['Reading','sweering','Gardening']},
{'name':'Gina','cabiods':['sling','Cooking']},
]
正如你所看到的,我需要为每个名字创建一组爱好,并创建一个独特的dicts列表

这就是我尝试过的:

{v[''u id']['route']:v代表路由列表中的v}.values()
但它不负责创建

有谁能帮我以最理想的方式这样做吗


谢谢。

如果您同意将输出的结构从一个名称更改为一个爱好集,则可以在线性时间内完成(忽略边缘情况,即大量哈希冲突):

如果您同意将嗜好设置为一组,则可以将其设置为真正的线性时间(同样,如果我们忽略了过度哈希冲突的可能性):

data = [
        {'name': 'John', 'hobbies': ['Reading', 'Swimming']},
        {'name': 'Gina', 'hobbies': ['Skating', 'Cooking']},
        {'name': 'John', 'hobbies': ['Gardening', 'Swimming']}
    ]

output = []
names_to_indices = {}
for d in data:
    if d['name'] not in names_to_indices:
        output.append({'name': d['name'], 'hobbies': set(d['hobbies'])})
        names_to_indices[d['name']] = len(output) - 1
    else:
        index = names_to_indices[d['name']]
        output[index]['hobbies'].update(d['hobbies'])
print(output)
# [{'name': 'John', 'hobbies': {'Gardening', 'Swimming', 'Reading'}},
#  {'name': 'Gina', 'hobbies': {'Skating', 'Cooking'}}]

如果您同意将输出的结构从名称更改为爱好集,仅将其更改为字典,则可以在线性时间内完成此操作(忽略边缘情况,即大量哈希冲突):

如果您同意将嗜好设置为一组,则可以将其设置为真正的线性时间(同样,如果我们忽略了过度哈希冲突的可能性):

data = [
        {'name': 'John', 'hobbies': ['Reading', 'Swimming']},
        {'name': 'Gina', 'hobbies': ['Skating', 'Cooking']},
        {'name': 'John', 'hobbies': ['Gardening', 'Swimming']}
    ]

output = []
names_to_indices = {}
for d in data:
    if d['name'] not in names_to_indices:
        output.append({'name': d['name'], 'hobbies': set(d['hobbies'])})
        names_to_indices[d['name']] = len(output) - 1
    else:
        index = names_to_indices[d['name']]
        output[index]['hobbies'].update(d['hobbies'])
print(output)
# [{'name': 'John', 'hobbies': {'Gardening', 'Swimming', 'Reading'}},
#  {'name': 'Gina', 'hobbies': {'Skating', 'Cooking'}}]

只需构造一个中间默认字典,它使您能够在线性时间内完成此操作。最后转换回所需的结构

inp = [
   {'name': 'John', 'hobbies': ['Reading', 'Swimming']},
   {'name': 'Gina', 'hobbies': ['Skating', 'Cooking']},
   {'name': 'John', 'hobbies': ['Gardening', 'Swimming']}
]

from collections import defaultdict
temp = defaultdict(set)
for d in inp:
    temp[d['name']].update(d['hobbies'])

result = [{'name':k, 'hobbies': list(v)} for k, v in temp.items()]
输出:

[{'name': 'John', 'hobbies': ['Gardening', 'Reading', 'Swimming']},
 {'name': 'Gina', 'hobbies': ['Cooking', 'Skating']}]

只需构造一个中间默认字典,它使您能够在线性时间内完成此操作。最后转换回所需的结构

inp = [
   {'name': 'John', 'hobbies': ['Reading', 'Swimming']},
   {'name': 'Gina', 'hobbies': ['Skating', 'Cooking']},
   {'name': 'John', 'hobbies': ['Gardening', 'Swimming']}
]

from collections import defaultdict
temp = defaultdict(set)
for d in inp:
    temp[d['name']].update(d['hobbies'])

result = [{'name':k, 'hobbies': list(v)} for k, v in temp.items()]
输出:

[{'name': 'John', 'hobbies': ['Gardening', 'Reading', 'Swimming']},
 {'name': 'Gina', 'hobbies': ['Cooking', 'Skating']}]

到目前为止你都试了些什么?为什么一定要有一个字典列表?如果不使用额外的空间将列表索引映射到名称,这无法在线性时间内完成,因此您最好从一开始就使用字典。对于“最佳”的定义,您当前的代码如何不是“最佳”的?@DeepSpace看起来OP正在生成json…@DeepSpace我之所以需要DICT列表,是因为我用这个相当容易理解的示例掩盖了我的真实场景。真正的场景需要一个字典列表,这就是问题的症结所在。到目前为止你尝试了什么?为什么必须是一个字典列表?如果不使用额外的空间将列表索引映射到名称,这无法在线性时间内完成,因此您最好从一开始就使用字典。对于“最佳”的定义,您当前的代码如何不是“最佳”的?@DeepSpace看起来OP正在生成json…@DeepSpace我之所以需要DICT列表,是因为我用这个相当容易理解的示例掩盖了我的真实场景。真正的场景需要一个目录列表,这正是造成问题的原因。