我正在努力学习/自学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的新手,但是理解简单的理解和循环......等等。我花了最后一晚的所有可能的尝试和非常嵌套的循环结构 - 这导致无限循环。
我希望其中一位专家可以帮助我如何处理这项任务,非常感谢任何帮助..谢谢!
答案 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
编辑:正如您所说,p
和q
都是input
的元素。表达式解析如下:对于p
中的每个人input
,使用键colleagues
对其进行充实,其值为q
中input
的所有人p
不是p
(并将所有此类已加密output
的列表收集到新列表{{1}}中)。