Python3:根据其他词典添加到列表中的词典

时间:2017-01-18 01:54:17

标签: python python-3.x dictionary nested

我正在努力学习/自学Python3,我正在努力重新格式化抓取的网络数据。

输入是词典列表:

[{'name' : 'Anna', 'gender': "f", 'ID': 512128, 'age' : 28}, 
 {'name' : 'Barney', 'gender': "m", 'ID': 012428, 'age' : 29},
 {'name' : 'Cesar', 'gender': "m", 'ID': 032536, 'age' : 57}]

我想获得一个字典列表,每个字典都有一个额外的字段名称“同事”,其中包含列表中其他字典的信息。

期望的输出:

[{'name' : 'Anna', 'gender': "f", 'ID': 512128, 'age' : 28, 'colleagues' : [{'name' : 'Barney', 'gender': "m", 'ID': 012428, 'age' : 29}, {'name' : 'Cesar', 'gender': "m", 'ID': 032536, 'age' : 57}]}, 
 {'name' : 'Barney', 'gender': "m", 'ID': 012428, 'age' : 29, 'colleagues' : [{'name' : 'Anna', 'gender': "f", 'ID': 512128, 'age' : 28}, {'name' : 'Cesar', 'gender': "m", 'ID': 032536, 'age' : 57}]},
 {'name' : 'Cesar', 'gender': "m", 'ID': 032536, 'age' : 57, 'colleagues' : [{'name' : 'Anna', 'gender': "f", 'ID': 512128, 'age' : 28},  {'name' : 'Barney', 'gender': "m", 'ID': 012428, 'age' : 29}]}]

正如你所知,我是python的新手,但是理解简单的理解和循环......等等。我花了最后一晚的所有可能的尝试和非常嵌套的循环结构 - 这导致无限循环。

我希望其中一位专家可以帮助我如何处理这项任务,非常感谢任何帮助..谢谢!

1 个答案:

答案 0 :(得分:1)

output = [dict([*p.items(),
                ['colleagues', [q for q in input if p != q]]
               ]) for p in input]

您可以使用套装和inputset - set(p)来加快速度。

整个dict([*p.items(), [k, v]])是一种破解,可以使用额外的键值对创建新的dict而无需使用语句。它几乎相当于给定的dict_with_new_pair(p, k, v)

def dict_with_new_pair(d, k, v):
    from copy import copy
    c = copy(d)
    c[k] = v
    return c

编辑:正如您所说,pq都是input的元素。表达式解析如下:对于p中的每个人input,使用键colleagues对其进行充实,其值为qinput的所有人p不是p(并将所有此类已加密output的列表收集到新列表{{1}}中)。