【问题标题】:Python3: Add to dictionaries in list, based on other dictionariesPython3:添加到列表中的字典,基于其他字典
【发布时间】:2017-01-18 01:54:16
【问题描述】:

我正在尝试学习/自学 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 新手,但了解简单的理解和 for 循环等。昨晚我花了所有可能的尝试和非常嵌套的循环结构 - 这导致了无限循环。

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

【问题讨论】:

    标签: python python-3.x dictionary nested


    【解决方案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_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 的元素。表达式解析如下:对于input 中的每个人p,用键colleagues 充实它,其值将是input 中不是p 的所有人q(并收集列表将所有这些丰富的p 放入一个新列表output)。

    【讨论】:

    • 太棒了,这解决了我的问题,谢谢!我想知道代码是如何工作的。列表理解遍历输入列表的字典,您解释了 dict([*p.items(), [k, v]]) 的作用。你能解释一下 if 条件以及 p 和 q 代表什么吗?两者似乎都是输入的元素。再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 2017-08-03
    • 2018-12-27
    • 2022-01-12
    • 2017-10-28
    • 1970-01-01
    • 2013-09-28
    相关资源
    最近更新 更多