【问题标题】:Python merge dictionaries within a while loopPython在while循环中合并字典
【发布时间】:2013-06-05 20:57:22
【问题描述】:

我有一个返回字典的函数part_func(x)。我想在作为另一个函数 main_func() 的一部分的 while 循环中运行该函数。

part_func(x) 的结果如下所示:

{'age': 80, 'name': 'peter'}
{'age': 20, 'name': 'stefan'}

我想从main_func() 得到这样的字典:

{'age': [80, 20], 'name': ['peter', 'stefan']}

下面的代码完成了这项工作:

dicts1 = dict1, dict2
dicts2 = {k:[d.get(k) for d in dicts1] for k in {k for d in dicts1 for k in d}}

我现在的问题是,我怎样才能在main_func() 中实现它?

def part_func(x):
    # produces dicitionary

def main_func():
    for x in range(10):
       return part_func(x) # returns dictionary

【问题讨论】:

  • 首先,只需使用for x in range(10) 并去掉x=0x+=1。其次,如果你每次循环都去return part_func(x),那么无论如何你只会循环一次,所以……你到底想在这里做什么?

标签: python function dictionary


【解决方案1】:

我宁愿使用这样的东西:

def main_func():
    final_d = {}
    for _ in range(10):
        for key, val in part_func().items():
            final_d.setdefault(key, []).append(val)
    return final_d

【讨论】:

    【解决方案2】:

    可以试试这个

    def part_func(x):
        # produces dicitionary
    
    def main_func():
        res = {}
        for x in range(10):
            for k,v in part_func(x).iteritems():
                res.setdefault(k, []).append(v)
        return  res
    

    【讨论】:

    • part_func(x).iteritems()part_func().items()有什么区别?
    • iteritems() 不在内存中创建列表,只是迭代项目,而 items() 创建列表(这是在 python 2.x 中)
    猜你喜欢
    • 2018-12-01
    • 2021-02-27
    • 2021-09-09
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 2022-01-18
    • 2018-02-22
    • 2014-11-02
    相关资源
    最近更新 更多